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

时间:2023-03-08 17:06:21

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

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