美文网首页iOS
iOS 自定义弹出View实现逻辑

iOS 自定义弹出View实现逻辑

作者: flyhao | 来源:发表于2015-12-15 11:06 被阅读1429次

    之前做的几个项目,都用到了弹出View的功能,看截图


    IMG_3053.PNG IMG_3054.PNG

    几乎每个app都会或多或少用到,这里写个简单思路

    订单支付界面

    //  PayForView.h
    #import <UIKit/UIKit.h>
    
    @protocol PayForViewDelegate <NSObject>
    
    - (void)payforWithPassWd:(NSString *)passWd;
    
    @end
    
    @interface PayForView : UIView
    
    @property (nonatomic, assign) id<PayForViewDelegate> delegate;
    
    - (void)show;
    
    @end
    
    //  PayForView.m
    #import "PayForView.h"
    
    @interface PayForView ()
    @property (nonatomic, strong)UIView *viewBg;
    @property (nonatomic, strong)UITextField *passWdTF;
    @end
    
    @implementation PayForView
    
    - (void)show
    {
        self.viewBg = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
        
        self.viewBg = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
        
        UITapGestureRecognizer *reg = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dissMissPresentVC)];
        reg.numberOfTapsRequired = 1;
        UITapGestureRecognizer *reg2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dissMissPresentVC)];
        reg.numberOfTapsRequired = 1;
        
        UIView *upView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, (SCREEN_HEIGHT - 150)/2)];
        upView.backgroundColor = [UIColor clearColor];
        UIView *downView = [[UIView alloc]initWithFrame:CGRectMake(0, SCREEN_HEIGHT - (SCREEN_HEIGHT - 150)/2, SCREEN_WIDTH, (SCREEN_HEIGHT - 150)/2)];
        downView.backgroundColor = [UIColor clearColor];
        [upView addGestureRecognizer:reg];
        [downView addGestureRecognizer:reg2];
        [self.viewBg addSubview:upView];
        [self.viewBg addSubview:downView];
        
        UIView *shareView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH - 40, 150)];
        shareView.center = CGPointMake(SCREEN_WIDTH / 2, SCREEN_HEIGHT/2);
        shareView.backgroundColor = UIColorWithRGB(26, 26, 26);
        shareView.layer.masksToBounds = YES;
        shareView.layer.cornerRadius = 3;
        shareView.userInteractionEnabled = YES;
        [self.viewBg addSubview:shareView];
        
        // 订单支付
        UILabel *titleLb = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-20, 40)];
        titleLb.center = CGPointMake((SCREEN_WIDTH-20)/2, 20);
        titleLb.textAlignment = NSTextAlignmentCenter;
        titleLb.text = @"订单支付";
        titleLb.textColor = [UIColor whiteColor];
    
        // 支付密码
        UIView *payView = [[UIView alloc] initWithFrame:CGRectMake(0, 40, SCREEN_WIDTH-40, 40)];
        payView.backgroundColor = UIColorWithRGB(51, 51, 51);
        
        [shareView addSubview:titleLb];
        [shareView addSubview:payView];
        
        UILabel *passWdLb = [[UILabel alloc] initWithFrame:CGRectMake(4, 0, 100, 40)];
        passWdLb.textAlignment = NSTextAlignmentCenter;
        passWdLb.font = [UIFont systemFontOfSize:13];
        passWdLb.text = @"支付密码:";
        passWdLb.textColor = [UIColor whiteColor];
        [payView addSubview:passWdLb];
        
        UITextField *passWdTF          = [[UITextField alloc]initWithFrame:CGRectMake(100, 0, SCREEN_WIDTH-40-100, 40)];
        [passWdTF setBorderStyle:UITextBorderStyleNone];
        passWdTF.textColor = [UIColor whiteColor];
        passWdTF.secureTextEntry    = YES;
        passWdTF.autocorrectionType = UITextAutocorrectionTypeNo;
        passWdTF.backgroundColor = [UIColor clearColor];
        [payView addSubview:passWdTF];
        _passWdTF = passWdTF;
        
        // 取消
        UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-40)/2, 100, (SCREEN_WIDTH-40)/2, 45)];
        cancelBtn.backgroundColor = UIColorWithRGB(50, 50, 50);
        [cancelBtn setTitle:@"取消" forState:UIControlStateNormal];
        cancelBtn.titleLabel.font = [UIFont systemFontOfSize:13];
        [cancelBtn addTarget:self action:@selector(animateOut) forControlEvents:UIControlEventTouchUpInside];
        [cancelBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [shareView addSubview:cancelBtn];
        
        UIButton *sureBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 100, (SCREEN_WIDTH-40)/2, 45)];
        sureBtn.backgroundColor = UIColorWithRGB(225, 24, 38);
        [sureBtn setTitle:@"支付" forState:UIControlStateNormal];
        sureBtn.titleLabel.font = [UIFont systemFontOfSize:13];
        [sureBtn addTarget:self action:@selector(sureIndent) forControlEvents:UIControlEventTouchUpInside];
        [sureBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [shareView addSubview:sureBtn];
        
        //背景
        [self creatBackgroundView];
        
        [self addSubview:self.viewBg];
        
        self.userInteractionEnabled = YES;
        self.viewBg.userInteractionEnabled = YES;
    }
    
    #pragma mark - Action
    -(void)sureIndent
    {
        if ([self.delegate respondsToSelector:@selector(payforWithPassWd:)]) {
            [self.delegate payforWithPassWd:self.passWdTF.text];
            [self animateOut];
        }
    }
    
    -(void)animateIn
    {
        self.viewBg.transform = CGAffineTransformMakeScale(0.01, 0.01);
        [UIView animateWithDuration:0.3 animations:^{
            self.viewBg.transform = CGAffineTransformMakeScale(1, 1);
        }];
        
    }
    
    -(void)animateOut
    {
        [UIView animateWithDuration:0.3 animations:^{
            self.viewBg.transform = CGAffineTransformMakeScale(0.01, 0.01);
            self.viewBg.alpha = 0.2;
            self.alpha = 0.2;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
        
    }
    
    -(void)creatBackgroundView
    {
        self.frame = [[UIScreen mainScreen] bounds];
        self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.0];
        self.opaque = NO;
        
    //这里自定义的View 达到的效果和UIAlterView一样是在Window上添加,UIWindow的优先级最高,Window包含了所有视图,在这之上添加视图,可以保证添加在最上面
        UIWindow *appWindow = [[UIApplication sharedApplication] keyWindow];
        [appWindow addSubview:self];
        
        [UIView animateWithDuration:0.2 animations:^{
            self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
        }];
        
    }
    
    -(void)dissMissPresentVC
    {
        [self animateOut];
    }
    
    

    相关文章

      网友评论

      • dffa7ad5e16a:有demo发个呗
      • Jasmine_Lisa:我想问一下,第一个的思路和第二个差不多么?第一个的Demo能发我一下么:stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye:

      本文标题:iOS 自定义弹出View实现逻辑

      本文链接:https://www.haomeiwen.com/subject/xqpuhttx.html