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

一、使用方法


整个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

iOS实现自定义的弹出视图(popView)的更多相关文章

  1. SDMask(iOS蒙层遮罩弹出引导)

    SDMask介绍 地址 针对iOS项目,大部分弹出视图三方都把弹出内容作为了项目的一部分,这种耦合局限性较大.该项目对此解耦,围绕我何时需要使用蒙层而展开设计.将弹出内容和动画和事件完全分离出去让co ...

  2. IOS弹出视图 LewPopupViewController

    LewPopupViewController是一款IOS弹出视图软件.iOS 下的弹出视图.支持iPhone/iPad. 软件截图 使用方法 弹出视图 1 2 3 4 5 PopupView *vie ...

  3. iOS 仿看了吗应用、指南针测网速等常用工具、自定义弹出视图框架、图片裁剪、内容扩展等源码

    iOS精选源码 扩展内容的cell - folding-cell 一个近乎完整的可识别中国身份证信息的Demo 可自动快速... JPImageresizerView 仿微信的图片裁剪 带年月和至今以 ...

  4. IOS开发之自定义系统弹出键盘上方的view(转载)

    这篇文章解决的一个开发中的实际问题就是:当弹出键盘时,自定义键盘上方的view.目前就我的经验来看,有两种解决方法.一个就是利用UITextField或者UITextView的inputAccesso ...

  5. UIPresentationController - iOS自定义模态弹出框

    参考: https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/Definin ...

  6. iOS自定义提示弹出框(类似UIAlertView)

    菜鸟一枚,大神勿喷.自己在牛刀小试的时候,发现系统的UIAlertView有点不喜欢,然后就自己自定义了一个UIAlertView,基本上实现了系统的UIAlertView,可以根据项目的需求修改UI ...

  7. UIAlertView弹出视图动画效果

    在App设计中为了加强用户体验,我们会常常加入一些友好的动画效果.比如类似UIAlertView弹出的动画效果,由于系统中并没有直接提供类似的动画API,如果我们想要做出一样的效果,那就得深入的研究一 ...

  8. ios下input focus弹出软键盘造成fixed元素位置移位

    正常状态下 input focus软键盘弹出时 问题描述: 头部结构fixed,滚动到下部内容区域,input.textarea等focus弹出软键盘时,头部位置偏移被居中(该问题ios7 beta3 ...

  9. 自定义PopupWindow弹出框(带有动画)

    使用PopupWindow来实现弹出框,并且带有动画效果 首先自定义PopupWindow public class LostPopupWindow extends PopupWindow { pub ...

随机推荐

  1. motan解读:添加spring 支持

    代码位置: motan-core的目录下       motan中使用spring管理配置对象.motan利用Spring的spi机制创建了自定义标签和相应的标签处理代码.具体使用方法见这篇.本文以m ...

  2. .net mvc HtmlHelper扩展使用

    如果是你是从webform开始接触.net,你应该记得webform开发中,存在自定义控件这东西,它使得我们开发起来十分方便,如今mvc大势所趋,其实在mvc开发时,也存在自定义控件这么个东西,那就是 ...

  3. [算法] 选择排序 Selection sort

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...

  4. C# 释放非托管资源

    C#中资源分为托管资源和非托管资源. 托管资源由垃圾回收器控制如何释放,不需要程序员过多的考虑(当然也程序员也可以自己释放). 非托管资源需要自己编写代码来释放.那么编写好的释放非托管资源的代码(释非 ...

  5. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档

    相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...

  6. warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

    最近在编译库文件后,使用它做APP,遇到如下问题: 1>LIBCMT.lib(invarg.obj) : error LNK2005: __pInvalidArgHandler 已经在 LIBC ...

  7. append some buttons to the standard datagrid pager bar

    <script type="text/javascript">  $(function(){   var pager = $('#dg').datagrid('getP ...

  8. Linux里实用命令之添加行号、文本和语法高亮显示

    写在前面的话 本博主我,强烈建议,来看此博文的朋友们,都玩玩. 最好,在刚入门的时候呢,不加行号,不玩文本和语法高亮显示,以后会深有体会.磨炼自己! 步骤一:进入 /etc/virc配置文件 步骤二: ...

  9. Could not bind factory to JNDI

    将hibernate.cfg.xml中 <session-factory name="SessionFactory">的name属性去掉即可

  10. CSS选择器的特殊性

    在我们为元素添加样式的时候,或多或少会出现一个元素会有几个不同规则的样式.有#id的,有.class,直接标签元素的,还有各种组合起来的选择器.那CSS到底如何解决这些冲突呢,我们这次专门来探讨一下. ...