從零開始設計搭建ios App框架(九)

分類:技術 時間:2016-10-25

遮罩層設計

首先看兩個設計

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


ads
ads

相關文章
ads

相關文章

ad