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

一、使用方法


整个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. 瞬间从IT屌丝变大神——CSS规范

    CSS规范主要包括以下内容: CSS Reset用YUI的CSS Reset. CSS采用CSSReset+common.css+app.css的形式. app.css采用分工制,一个前端工程师负责一 ...

  2. 视频资源下载方法[download video resources]

    笔者做视频时钟分析,需要用到大量特殊的视频,如何获取需要的视频是一个问题? 以下载NBA视频为例: Tools:①腾讯视频软件 (自行下载)  ②批处理文件(下文会给出代码) convert.bat ...

  3. 依赖包bcrypt安装Issues

    说明:本文在个人博客地址为edwardesire.com,欢迎前来品尝. 在决策树项目中,使用到了bcrypt依赖包来加密文件.在wini8(win7)部署安装这个依赖的时候容易出现出现了问题. 解决 ...

  4. Emacs和它的朋友们——阅读源代码篇(转)

    正如那本<Code Reading>一书中指出的那样,源代码阅读一直没有被很好的重 视:你上大学的时候有“代码阅读”这门课吗?相信没有. 1 Source Insight 谈到阅读源代码, ...

  5. 第三百零四天 how can I 坚持

    我以为我遇到了,却是痴心妄想啊.哪有那么好的事.其实也无所谓,淡定,却又有点不淡定了. 洗澡睡觉吧,明天还要上班呢. 应该摆脱这种状态. 什么都不想,放空.

  6. 终于弄好了 homework-09

    近一周的时间,顶着编译大作业严重搁置的压力,天天搞,终于把网页动态展示的搞出来了!恩,还挺好看~ 因为是最后一次作业了,也是因为天生的完美主义强迫症,做到自己满意才放心停下来.不过,这个过程,看着同学 ...

  7. codeforces 630A Again Twenty Five!

    A. Again Twenty Five! time limit per test 0.5 seconds memory limit per test 64 megabytes input stand ...

  8. 写的一个判断注册Email是否是个人邮件,而不是公司邮件的方法

    以下这个方法其实也不是很全面,它只判断了hotmail, gmail和yahoo 如果你还需要加上其他认为是私人Email的Email, 只要按照同样的方法自己加上就可以了 Public void C ...

  9. Serializable 序列化为字符串 base64

    工具类 Base64.java import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ja ...

  10. [置顶] 栈/入栈/出栈顺序(c语言)-linux

    说明: 1.栈底为高地址,栈顶为低地址. 2.入栈顺序:从右到左. 解释1:栈在内存中的结构 [注:0x00 到 0x04之间间隔4个地址] 入栈:指针先指向0x10,从高地址向低地址方向填数值,最终 ...