遮罩層設計
首先看兩個設計
E0C3E5AE-A5DC-482B-8F20-7F88011CA259.png
F023E267-158F-41DA-B087-535A533877C5.png
類似這種彈出層,我相信App里面或多或少都會出現,可能是彈出提示內容,也有可能是彈出多個菜單選項。
其實實現方式都一樣,在一個半透明的View上添加所需要展示的內容。
其實沒什么要說的,直接上代碼吧!
@interface PGPopupView : UIView /* 創建popview,子視圖由block回調實現自定義樣式 */ - (id)initWithContent:(UIView * (^)(id target, SEL closeSEL))contentBlock; /* 添加到view上并顯示 */ - (void)showInView:(UIView *)view; /* 關閉 */ - (void)closeView; @end
PGPopupView.m
@interface PGPopupView ()lt;UIGestureRecognizerDelegategt; @property(nonatomic, strong)UIView *contentView; @property(nonatomic, assign)CGFloat contentHeight; @property(nonatomic, assign)CGFloat contentWidth; @property(nonatomic, copy)UIView *(^mContentBlock)(id target, SEL closeSEL); @end @implementation PGPopupView - (id)initWithContent:(UIView * (^ __nonnull)(id target, SEL closeSEL))contentBlock { if(self = [super init]) { self.mContentBlock = contentBlock; self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREENH_HEIGHT); self.backgroundColor = ColorFromRGBA(160, 160, 160, 0); [self createSubViews]; [self animeData]; } return self; } - (void)animeData { //self.userInteractionEnabled = YES; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; [self addGestureRecognizer:tapGesture]; tapGesture.delegate = self; __weak PGPopupView *weakSelf = self; [UIView animateWithDuration:.25 animations:^{ weakSelf.backgroundColor = UIColorFromRGBA(0x000000, 0.7); [UIView animateWithDuration:.25 animations:^{ weakSelf.contentView.frame = CGRectMake((self.frame.size.width-self.contentWidth)/2, (self.frame.size.height-self.contentHeight)/2, self.contentWidth, self.contentHeight); }]; } completion:^(BOOL finished) { }]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if([touch.view isKindOfClass:[self class]]) { return YES; } return NO; } - (void)tappedCancel { __weak PGPopupView *weakSelf = self; [UIView animateWithDuration:.25 animations:^{ [weakSelf.contentView setFrame:CGRectMake(self.frame.size.width/2, self.frame.size.height/2, 0, 0)]; weakSelf.alpha = 0; } completion:^(BOOL finished) { if (finished) { [weakSelf removeFromSuperview]; } }]; } - (void)showInView:(UIView *)view { if(view==nil){ [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; }else{ [view addSubview:self]; } } - (void)closeView { [self tappedCancel]; } ///////////////// #pragma mark - - (void)createSubViews { if(!self.contentView) { if(self.mContentBlock) { self.contentView = self.mContentBlock(self, @selector(closeView)); self.contentHeight = self.contentView.frame.size.height; self.contentWidth = self.contentView.frame.size.width; self.contentView.frame = CGRectZero; } else { self.contentView = [[UIView alloc] initWithFrame:CGRectZero]; self.contentHeight = 0; } self.contentView.clipsToBounds = YES; self.contentView.frame = CGRectMake(self.frame.size.width/2, self.frame.size.height/2, 0, 0); [self addSubview:self.contentView]; } } @end
調用示例:
WEAKSELF PGPopupView *view = [[PGPopupView alloc] initWithContent:^UIView * (id target, SEL closeSEL){ UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, weakSelf.view.frame.size.width-2*PGHeightWith1080(60), PGHeightWith1080(960))]; contentView.backgroundColor = UIColorFromRGBA(0xff00ff, 1.0); UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; closeBtn.frame = CGRectMake(contentView.frame.size.width-PGHeightWith1080(120), PGHeightWith1080(60), PGHeightWith1080(90), PGHeightWith1080(90)); [closeBtn setBackgroundImage:[UIImage imageNamed:@quot;icon_closequot;] forState:UIControlStateNormal]; [closeBtn addTarget:target action:closeSEL forControlEvents:UIControlEventTouchUpInside]; [contentView addSubview:closeBtn]; //可以自定義界面 return contentView; }]; [view showInView:nil];
這篇沒有什么多說的,就這樣吧!!!
Tags: iOS開發
文章來源:http://www.jianshu.com/p/fba8160d2bef