zoukankan      html  css  js  c++  java
  • iOS实现自定义的弹出视图(popView)

    前段时间,在项目中有个需求是支付完成后,弹出红包,实现这么一个发红包的功能。做了最后,实现的效果大致如下:

    效果图

    571495-3d909ad023b875b3.gif

    一、使用方法

    整个ViewController的代码大致如下

    //
    //  SecondViewController.m
    //  HWPopTool
    //
    //  Created by HenryCheng on 16/1/11.
    //  Copyright ?(版权符号) 2016年 www.igancao.com. All rights reserved.
    //
    
    #import "SecondViewController.h"
    #import "HWPopTool.h"
    
    @interface SecondViewController ()
    
    @property (strong, nonatomic) UIView *contentView;
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor whiteColor];
        
        _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
        _contentView.backgroundColor = [UIColor clearColor];
        
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(100, 200, 100, 50);
        btn.backgroundColor = [UIColor greenColor];
        [btn addTarget:self action:@selector(popViewShow) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn];
    }
    
    - (void)popViewShow {
        UIImageView *imageV = [[UIImageView alloc]initWithFrame:_contentView.bounds];
        imageV.image = [UIImage imageNamed:@"jei"];
        [_contentView addSubview:imageV];
        
        [HWPopTool sharedInstance].shadeBackgroundType = ShadeBackgroundTypeSolid;
        [HWPopTool sharedInstance].closeButtonType = ButtonPositionTypeRight;
        [[HWPopTool sharedInstance] showWithPresentView:_contentView animated:YES];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    我们引入了HWPopTool.h,并且创建了一个button,点击button的方法是popViewShow,我们来看一下这里面的代码:

    - (void)popViewShow {
        UIImageView *imageV = [[UIImageView alloc]initWithFrame:_contentView.bounds];
        imageV.image = [UIImage imageNamed:@"jei"];
        [_contentView addSubview:imageV];
        
        [HWPopTool sharedInstance].shadeBackgroundType = ShadeBackgroundTypeSolid;
        [HWPopTool sharedInstance].closeButtonType = ButtonPositionTypeRight;
        [[HWPopTool sharedInstance] showWithPresentView:_contentView animated:YES];
        
    }

    这里在_contentView上放了一个imageView,然后我们设置了shadeBackgroundType和 closeButtonType以后,下面一句代码就是展示出来popView。这里主要就是我们弹出一个view,至于这个view多大,上面放什么, 都是由你自己决定的。

    二、关于HWPopTool里面的一些属性和方法

    先来看一下HWPopTool.h

    //
    //  HWPopTool.h
    //  HWPopTool
    //
    //  Created by HenryCheng on 16/1/11.
    //  Copyright ?(版权符号) 2016年 www.igancao.com. All rights reserved.
    //
    
    #import [Foundation/Foundation.h](因识别问题,此处将尖括号改为方括号)
    #import [UIKit/UIKit.h](因识别问题,此处将尖括号改为方括号)
    /**
     *  关闭按钮的位置
     */
    typedef NS_ENUM(NSInteger, ButtonPositionType) {
        /**
         *  无
         */
        ButtonPositionTypeNone = 0,
        /**
         *  左上角
         */
        ButtonPositionTypeLeft = 1 << 0,
        /**
         *  右上角
         */
        ButtonPositionTypeRight = 2 << 0
    };
    /**
     *  蒙板的背景色
     */
    typedef NS_ENUM(NSInteger, ShadeBackgroundType) {
        /**
         *  渐变色
         */
        ShadeBackgroundTypeGradient = 0,
        /**
         *  固定色
         */
        ShadeBackgroundTypeSolid = 1 << 0
    };
    
    typedef void(^completeBlock)(void);
    
    @interface HWPopTool : NSObject
    
    @property (strong, nonatomic) UIColor *popBackgroudColor;//弹出视图的背景色
    @property (assign, nonatomic) BOOL tapOutsideToDismiss;//点击蒙板是否弹出视图消失
    @property (assign, nonatomic) ButtonPositionType closeButtonType;//关闭按钮的类型
    @property (assign, nonatomic) ShadeBackgroundType shadeBackgroundType;//蒙板的背景色
    
    /**
     *  创建一个实例
     *
     *  @return CHWPopTool
     */
    + (HWPopTool *)sharedInstance;
    /**
     *  弹出要展示的View
     *
     *  @param presentView show View
     *  @param animated    是否动画
     */
    - (void)showWithPresentView:(UIView *)presentView animated:(BOOL)animated;
    /**
     *  关闭弹出视图
     *
     *  @param complete complete block
     */
    - (void)closeWithBlcok:(void(^)())complete;
    
    @end

    由于之前写的比较仓促,今天趁着空余时间又把代码整理了一遍,比如关闭之后的回调,之前用delegate实现的,今天又用block重新写的,简洁一点吧,另外基本上所有的方法、属性、枚举我都有注释,算是个个人习惯吧。这里面有几点需要说明的是:

    1.ShadeBackgroundType是蒙板的背景色属性,有固定的和渐变的(ShadeBackgroundTypeGradient),关于这个渐变,有兴趣的可以研究一下CAGradientLayer,还是很有趣的,在后来的文章中也会说到。

    2.tapOutsideToDismiss这个是设置点击蒙板,popView消失不消失的属性,默认的是YES

    3.- (void)closeWithBlcok:(void(^)())complete这个方法,是关闭后的回调,比如说发送红包以后,等popView消失以后回到上一页的这种。

    由于注释的基本都很清楚了,这里就不多说了,

    三、最后

    我一般写博客的时候,贴代码喜欢贴全部的代码,我认为这样会直观一点(当然非常多的除外),最后,所有的代码demo都可以在 这里 看到!

  • 相关阅读:
    贝叶斯统计
    Gamma函数
    归纳逻辑 贝叶斯主义
    向同一个模型的外键反向关联名称产生了冲突 Django迁移
    Transformation-Based Error-Driven Learning and Natural Language Processing: A Case Study in Part-of-Speech Tagging
    part of speech
    fnTBL is a customizable, portable and free source machine-learning toolkit
    Choose between the 64-bit or 32-bit version of Office
    How to Identify Gender in Datasets at Large Scales, Ethically and Responsibly | MIT Center for Civic Media
    英语单词的去重后按照长度降序、升序排列
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5367412.html
Copyright © 2011-2022 走看看