你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS實現自定義的彈出視圖(popView)

iOS實現自定義的彈出視圖(popView)

編輯:IOS開發基礎

前段時間,在項目中有個需求是支付完成後,彈出紅包,實現這麼一個發紅包的功能。做了最後,實現的效果大致如下:

效果圖

571495-3d909ad023b875b3.gif

一、使用方法

整個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消失以後回到上一頁的這種。

由於注釋的基本都很清楚了,這裡就不多說了,

三、最後

我一般寫博客的時候,貼代碼喜歡貼全部的代碼,我認為這樣會直觀一點(當然非常多的除外),最後,所有的代碼demo都可以在 這裡 看到!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved