• iOS实现自定义的弹出视图(popView)


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

     

    一、使用方法


    整个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消失以后回到上一页的这种。 

    三、最后

    https://github.com/Loveway/HWPopTool

  • 相关阅读:
    设置matplotlib.pyplot设置画图的坐标系
    [leetcode]238. 除自身以外数组的乘积
    彩色图到灰度图究竟是怎么变换的
    1.1 PIL:Python图像处理类库
    基于GoogLeNet的不同花分类微调训练案例
    消息队列 ActiveMQ的简单了解以及点对点与发布订阅的方法实现ActiveMQ
    解决session共享问题
    linux安装Nginx 以及 keepalived 管理Nginx
    nginx解决服务器宕机、解决跨域问题、配置防盗链、防止DDOS流量攻击
    Nginx实现负载均衡
  • 原文地址:https://www.cnblogs.com/fengmin/p/5887438.html
Copyright © 2020-2023  润新知