iOS iOS Developer

从零开始设计搭建ios App框架(九)

2016-09-25  本文已影响152人  潇水渔翁

遮罩层设计


首先看两个设计

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 ()<UIGestureRecognizerDelegate>
@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:@"icon_close"] forState:UIControlStateNormal];
            [closeBtn addTarget:target action:closeSEL forControlEvents:UIControlEventTouchUpInside];
            [contentView addSubview:closeBtn];
            
            //可以自定义界面
            
            return contentView;
        }];
        [view showInView:nil];

这篇没有什么多说的,就这样吧!!!

上一篇下一篇

猜你喜欢

热点阅读