iOS 에서 필요 한 팝 업 창 효과 요약

9581 단어 ios탄창
머리말
탄 상 자 는 인간 과 컴퓨터 의 상호작용 에서 흔히 볼 수 있 는 방식 으로 문의,경고 와 특정한 삽입 임 무 를 완성 하 는 데 자주 나타 나 고 웹 페이지 와 모 바 일 에서 흔히 볼 수 있다.탄 상 자 는 사용자 로 하여 금 현재 가장 긴급 한 정보 에 효과적으로 초점 을 맞 출 수 있 고 현재 페이지 를 떠 나 지 않 는 전제 에서 경 량 의 임 무 를 완성 할 수 있다.
우리 의 실제 개발 프로젝트 에서 팝 업 창 은 없어 서 는 안 된다.우 리 는 시스템 의 AlertView Controller 를 사용 하 는 경우 가 많 지만 실제 상황 에서 우리 의 개발 수 요 를 만족 시 키 지 못 한다.이때 우리 가 필요 로 하 는 것 은 바로 자신의 팝 업 창 효 과 를 사용자 정의 하 는 것 이다.이어서 나 는 내 가 봉 인 된 탄창 효 과 를 쓸 것 이다.프 록 시 delegate 리 셋,block 리 셋,xib 새 view 를 포함 하여 우리 가 필요 로 하 는 팝 업 창 효 과 를 만 듭 니 다.
다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 살 펴 봅 시다.
정부의 사고 방향.
1.우리 가 직접 시작 하기 전에 공식 적 으로 어떻게 포장 하 는 지 먼저 봐 야 우리 가 쓴 코드 가 애플 언어 에 가 까 워 지고 커 보인다.좋 은 코드 는 반드시 명 의 를 보 는 것 이다.다른 사람들 은 이 방법 을 보면 우리 가 이 방법 을 통 해 어떤 효 과 를 얻 을 수 있 는 지 알 수 있다.

// ios8.0   
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"  " message:@"message" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"  ");
}];

[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
// ios8.0   
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Tittle" message:@"This is message" delegate:self 
cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil];
[alertView show];
코드 양 스타일 에 있어 서 저 는 옛날 버 전의 팝 업 창 을 비교적 좋아 하기 때 문 입 니 다.코드 에 있어 서 한 마디 로 흐뭇 합 니 다.그래서 이제 저희 패키지 도 공식 흉 내 내기 시작...
delegate
애플 공식 에 서 는 사용자 가 어떤 단 추 를 누 르 는 지 식별 함으로써 더 많은 조작 사건 이 필요 하 다 는 것 을 확인 해 야 한 다 는 것 을 알 수 있다.이 때 는 대 리 를 통 해 이 루어 진다.대리 라면 우 리 는 더 이상 익숙 할 수 없다.
1.먼저 협 의 를 설명 한다.

#pragma mark -   
@class HLAlertView;
@protocol HLAlertViewDelegate<NSObject>
- (void)alertViewDidClickButtonWithIndex:(NSInteger)index;
@end
2.view Controller 에서 대리 에 따라 대 리 를 설정 하고 실현 방법 을 설정 하면 됩 니 다.

<HLAlertViewDelegate>
self.delegate = self;

#pragma mark --- HLAlertViewDelegate
-(void)alertViewDidClickButtonWithIndex:(NSInteger)index{
if (index == AlertSureButtonClick) {
[self alertSureButtonClick];
}else{
[self alertCauseButtonClick];
}
}
3.다음은 우리 의 패 키 징 류 를 실현 하 는 h 파일 방법 설명 과 m 의 실현 방법 입 니 다.

//.h   
#import <UIKit/UIKit.h>

typedef enum : NSUInteger {
AlertCauseButtonClick = 0,
AlertSureButtonClick
} AlertButtonClickIndex;

#pragma mark -   
@class HLAlertView;
@protocol HLAlertViewDelegate<NSObject>
- (void)alertViewDidClickButtonWithIndex:(NSInteger)index;
@end
@interface HLAlertView : UIView

@property(nonatomic, weak) id <HLAlertViewDelegate> delegate;

- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message sureButton:(NSString *)sureBtn;
- (void)show;

@end

@interface HLAlertView()

/**      view */
@property (nonatomic,strong) UIView *contentView;

/**      */
@property (nonatomic,copy) NSString *title;

/** message */
@property (nonatomic,copy) NSString *message;

/**      */
@property (nonatomic,copy) UIButton *sureButton;

@end


@implementation HLAlertView

- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message sureButton:(NSString *)sureBtn{

if (self = [super init]) {
self.title = tittle;
self.message = message;

[self sutUpView];
}
return self;
}

- (void)sutUpView{
self.frame = [UIScreen mainScreen].bounds;
self.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.85];
[UIView animateWithDuration:0.5 animations:^{
self.alpha = 1;
}];

//-------       -------//
self.contentView = [[UIView alloc]init];
self.contentView.frame = CGRectMake(0, 0, SCREEN_WIDTH - 80, 150);
self.contentView.center = self.center;
self.contentView.backgroundColor = [UIColor whiteColor];
self.contentView.layer.cornerRadius = 6;
[self addSubview:self.contentView];

//   
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, self.contentView.width, 22)];
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.text = self.title;
[self.contentView addSubview:titleLabel];

// message
UILabel *messageLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 50, self.contentView.width, 22)];
messageLable.font = [UIFont boldSystemFontOfSize:17];
messageLable.textAlignment = NSTextAlignmentCenter;
messageLable.text = self.message;
[self.contentView addSubview:messageLable];


//     
UIButton * causeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
causeBtn.frame = CGRectMake(0, self.contentView.height - 40, self.contentView.width/2, 40);
causeBtn.backgroundColor = [UIColor grayColor];
[causeBtn setTitle:@"  " forState:UIControlStateNormal];
[causeBtn addTarget:self action:@selector(causeBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:causeBtn];

//     
UIButton * sureButton = [UIButton buttonWithType:UIButtonTypeCustom];
sureButton.frame = CGRectMake(causeBtn.width, causeBtn.y, causeBtn.width, 40);
sureButton.backgroundColor = [UIColor redColor];
[sureButton setTitle:@"  " forState:UIControlStateNormal];
[sureButton addTarget:self action:@selector(processSure:) forControlEvents:UIControlEventTouchUpInside];

[self.contentView addSubview:sureButton];

}

- (void)show{
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
[keyWindow addSubview:self];
}


- (void)processSure:(UIButton *)sender{
if ([self.delegate respondsToSelector:@selector(alertViewDidClickButtonWithIndex:)]) {
[self.delegate alertViewDidClickButtonWithIndex:AlertSureButtonClick];
}
[self dismiss];
}

- (void)causeBtn:(UIButton *)sender{

if ([self.delegate respondsToSelector:@selector(alertViewDidClickButtonWithIndex:)]) {
[self.delegate alertViewDidClickButtonWithIndex:AlertCauseButtonClick];
}
[self dismiss];
}

#pragma mark -      
/**       */
- (void)dismiss{
[self removeFromSuperview];
}
대리 의 방식 을 통 해 우 리 는 우리 자신의 페이지 의 포장 을 완성 했다.
블록 윈도우
먼저 봉 인 된 후에 우리 의 호출 방식 을 봅 시다.

HLAlertViewBlock * alertView = [[HLAlertViewBlock alloc] initWithTittle:@"  " message:@"  Block       " block:^(NSInteger index) {
if (index == AlertSureButtonClick) {
[self alertSureButtonClick];
}else{
[self alertCauseButtonClick];
}
}];
[alertView show];
대리 방식 에 비해 우 리 는 이런 block 리 턴 을 좋아 합 니 다.물론 우리 가 처리 해 야 할 논리 가 많 을 때 는 대리 가 좋 고 구체 적 인 환경 에서 구체 적 으로 사용 하 는 것 이 좋다.
블록 으로 봉 인 된 장점 은 우리 가 방법 을 구성 할 때 우리 의 미래 클릭 방법 을 실현 할 수 있 기 때문에 사용자 정의 팝 업 창 류 의.h 파일 에서 블록 속성 을 밝 혀 야 합 니 다.코드

//.h
@interface HLAlertViewBlock : UIView

@property(nonatomic, copy) void (^buttonBlock) (NSInteger index);

- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message block:(void (^) (NSInteger index))block;

- (void)show;

@end

//.m
@interface HLAlertViewBlock()

/**      view */
@property (nonatomic,strong) UIView *contentView;

/**      */
@property (nonatomic,copy) NSString *title;

/** message */
@property (nonatomic,copy) NSString *message;

/**      */
@property (nonatomic,copy) UIButton *sureButton;

@end


@implementation HLAlertViewBlock

- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message block:(void (^)(NSInteger))block{
if (self = [super init]) {
self.title = tittle;
self.message = message;
self.buttonBlock = block;
[self sutUpView];
}
return self;
}
여기까지 우리 블록 팝 업 창 설명 방법 도 끝 났 습 니 다.
xib 의 봉인 탄창

좋 은 점 은 인터페이스 코드 를 쓰 지 않 아 도 된다 는 것 이다.
같은 길 로 돌아가다.
새 view 가 아 닌 Controller 를 통 해 창 효 과 를 실현 하 는 방법 도 있 습 니 다.투명 한 컨트롤 러 를 새로 만 드 는 것 입 니 다.코드 는 다음 과 같다.

PopViewController * popVC = [[PopViewController alloc] init];
UIColor * color = [UIColor blackColor];
popVC.view.backgroundColor = [color colorWithAlphaComponent:0.85];
popVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:popVC animated:NO completion:nil];
더 간단 하고 논리 적 으로 도 처리 하기 쉽다.
마지막 으로 demo 주소 첨부:gibHub 주소:https://github.com/MrBMask
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기