前段時間,在專案中有個需求是支付完成後,彈出紅包,實現這麼一個發紅包的功能。做了最後,實現的效果大致如下:
一、使用方法
整個ViewController
的程式碼大致如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// // 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
,我們來看一下這裡面的程式碼:
1 2 3 4 5 6 7 8 9 10 |
- (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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
// // 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
都可以在 這裡 看到!