亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

支付寶登陸界面(手勢解鎖的實現)

2019-11-14 18:20:30
字體:
來源:轉載
供稿:網友

 //1.下面是實現的步驟,基本上下面的注釋應該都寫明白了,多謝大牛們指點,如果需要素材和源工程文件,可以索要,謝謝支持 ?

 //2.在最下面附有效果圖

#import "ViewController.h"

#import "FFFGestureView.h"

@interface ViewController ()

@PRoperty (weak, nonatomic) IBOutlet UIImageView *smallView;

@property (weak, nonatomic) IBOutlet FFFGestureView *gestureView;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Home_refresh_bg"]];

    self.gestureView.myblock = ^(UIImage *image,NSString *pass){

        NSString *turePass = @"012";

        if([pass isEqualToString:turePass]){

            self.smallView.image = nil;

            return YES;

        }else{

            self.smallView.image = image;

            return NO;

        }

    };

}

***************************************************************************

#import <UIKit/UIKit.h>

@interface FFFGestureView : UIView

@property (nonatomic,copy) BOOL(^myblock)(UIImage *,NSString *);

@end

***************************************************************************

#import "FFFGestureView.h"

#import "SVProgressHUD.h"

#define SUMCOUNT 9

@interface FFFGestureView ()

//定義可變數組加載需要的button

@property (nonatomic,strong) NSArray *buttons;

//設置數組接收畫的線

@property (nonatomic,strong) NSMutableArray *lineButton;

//定義一個點,保存手指當前的位置

@property(nonatomic,assign) CGPoint currentPoint;

@end

 

@implementation FFFGestureView

 

-(NSMutableArray *)lineButton{

    if(_lineButton==nil){

        _lineButton = [NSMutableArray array];

    }

    return _lineButton;

}

 

//懶加載button

-(NSArray *)buttons{

    if(_buttons==nil){

        NSMutableArray *arrayM = [NSMutableArray array];

        for(int i=0;i<SUMCOUNT;i++){

            

            UIButton *button = [[UIButton alloc] init];

            button.tag = i;

//            button.backgroundColor = [UIColor redColor];

            [button setUserInteractionEnabled:NO];

            

            [button setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];

            [button setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateHighlighted];

            [button setBackgroundImage:[UIImage imageNamed:@"gesture_node_error"] forState:UIControlStateSelected];

            

            [self addSubview:button];

            [arrayM addObject:button];

        }

        _buttons = [arrayM copy];

    }

    return _buttons;

}

 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

 

//    獲取touch對象

    UITouch *touch = [touches anyObject];

//    獲取點擊的點

    CGPoint point = [touch locationInView:touch.view];

    

//    遍歷所有的按鈕

    for(int i=0;i<self.buttons.count;i++){

    

        UIButton *button = self.buttons[i];

//        按鈕的frame是否包含了點擊的點

        if(CGRectContainsPoint(button.frame, point)){

//        開始高亮狀態

            button.highlighted = YES;

            

//            判斷這個按鈕是不是已經添加到了數組當中,如果沒有在添加

            if(![self.lineButton containsObject:button]){

            

                [self.lineButton addObject:button];

            }

        }

    }

}

 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    //    獲取touch對象

    UITouch *touch = [touches anyObject];

    //    獲取點擊的點

    CGPoint point = [touch locationInView:touch.view];

    

    //    獲取移動的時候手指位置

    self.currentPoint = point;

 

    //    遍歷所有的按鈕

    for(int i=0;i<self.buttons.count;i++){

        

        UIButton *button = self.buttons[i];

        //        按鈕的frame是否包含了點擊的點

        if(CGRectContainsPoint(button.frame, point)){

            //        開始高亮狀態

            button.highlighted = YES;

//            判斷這個按鈕是不是已經添加到了數組當中,如果沒有在添加

            if(![self.lineButton containsObject:button]){

                

                [self.lineButton addObject:button];

            }

        }

    }

    [self setNeedsDisplay];

}

 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

 

//    解決錯誤的時候,最后手指的位置不連接

    self.currentPoint = [[self.lineButton lastObject] center];

    [self setNeedsDisplay];

    

    for (int i=0; i<self.lineButton.count; i++) {

        UIButton *button = self.lineButton[i];

        button.selected = YES;

        button.highlighted = NO;

    }

//    在恢復之前不能進行連線

    [self setUserInteractionEnabled:NO];

    

    NSString *passWord = @"";

    for (int i=0; i<self.lineButton.count; i++) {

        //        拼接按鈕的tag

        passWord = [passWord stringByAppendingString:[NSString stringWithFormat:@"%ld",[self.lineButton[i] tag]]];

    }

    

//    輸出當前VIew作為image

    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);

//    獲取上下文

    CGContextRef ctx = UIGraphicsGetCurrentContext();

//    渲染

    [self.layer renderInContext:ctx];

//    通過上下文獲取圖片

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

//    關閉上下文

    UIGraphicsEndImageContext();

    

    if(self.myblock){

        if(self.myblock(image,passWord)){

            [SVProgressHUD showSuccessWithStatus:@"密碼正確"];

        }else{

            [SVProgressHUD showErrorWithStatus:@"密碼錯誤"];

        }

    }

//    顯示錯誤的樣式 1秒鐘

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

//        恢復之后再把用戶交互打開

        [self setUserInteractionEnabled:YES];

        [self clearScreen];

    });

}

 

-(void)clearScreen{

    [self.lineButton removeAllObjects];

    for (int i=0; i<self.buttons.count ; i++) {

        UIButton *button = self.buttons[i];

        button.highlighted = NO;

        button.selected = NO;

    }

//    恢復原始狀態

    [self setNeedsDisplay];

}

-(void)drawRect:(CGRect)rect{

 

//    創建路徑對象

    UIBezierPath *path = [UIBezierPath bezierPath];

    

    for(int i=0;i<self.lineButton.count;i++){

        if(i==0){

            [path moveToPoint:[self.lineButton[i] center]];

        }else{

            [path addLineToPoint:[self.lineButton[i] center]];

        }

    }

    if(self.lineButton.count){

//     連接到手指的位置

        [path addLineToPoint:self.currentPoint];

    }

//    設置顏色

    [[UIColor redColor] set];

    

//    設置線寬

    path.lineWidth = 10;

    

//    設置連接處的樣式

    [path setLineJoinStyle:kCGLineJoinRound];

    

//    設置頭尾的樣式

    [path setLineCapStyle:kCGLineCapRound];

    

//    渲染

    [path stroke];

}

-(void)layoutSubviews{

    

    [super layoutSubviews];

    

    CGFloat w = 74;

    CGFloat h = w;

    CGFloat margin = (self.frame.size.width-3*w)/4;

    

    for(int i=0;i<self.buttons.count;i++){

    

        UIButton *button = self.buttons[i];

        CGFloat row = i % 3;

        CGFloat col = i / 3;

        CGFloat x = row * (margin + w) + margin;

        CGFloat y = col * (margin + h) + margin;

        button.frame = CGRectMake(x, y, w, h);

    }

}

@end

 

 


上一篇:設計模式-02-單例

下一篇:iOS-漢字排序

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色先锋久久影院av| 久久久中文字幕| 日韩精品视频中文在线观看| 国产精品视频网址| 国产精品一久久香蕉国产线看观看| 夜夜嗨av色综合久久久综合网| 亚洲影院色无极综合| 国产成人精品av| 亚洲国产成人在线播放| 日韩免费电影在线观看| 亚洲国产精品人久久电影| 国产精品入口夜色视频大尺度| 日韩av大片在线| 欧美综合激情网| 97在线观看视频国产| 亚洲国产欧美一区二区三区同亚洲| 亚洲视频欧美视频| 亚洲欧洲免费视频| 一区二区日韩精品| 国产精品久久久久久久久久东京| 97超级碰碰人国产在线观看| 国产不卡av在线免费观看| 51久久精品夜色国产麻豆| 日韩激情视频在线播放| 久久中文字幕在线| 欧美激情视频在线免费观看 欧美视频免费一| 美女国内精品自产拍在线播放| 欧美成人亚洲成人| 精品日本美女福利在线观看| 一夜七次郎国产精品亚洲| 国产视频精品xxxx| 亚洲精品www久久久| 国产亚洲精品美女| 日本伊人精品一区二区三区介绍| www.亚洲人.com| 国产精品视频区1| 亚洲欧美一区二区激情| 91亚洲精品久久久久久久久久久久| 2018国产精品视频| 久久精品国产99国产精品澳门| 久久亚洲综合国产精品99麻豆精品福利| 日韩少妇与小伙激情| 欧美精品免费看| 亚洲区一区二区| 久久亚洲私人国产精品va| 亚洲精品www久久久久久广东| 色综合色综合久久综合频道88| 欧美另类在线播放| 国产亚洲欧美视频| 亚洲va电影大全| 欧美理论片在线观看| 亚洲视频欧美视频| 久久久久久九九九| 精品久久久久久久久久久久| 日韩av电影免费观看高清| 欧美午夜片在线免费观看| 国产a∨精品一区二区三区不卡| 最新69国产成人精品视频免费| 精品国产一区二区三区久久狼5月| 日韩亚洲成人av在线| 亚洲福利影片在线| 欧美亚洲成人网| 国产精品久久久久aaaa九色| 亚洲韩国欧洲国产日产av| 欧美精品在线观看| 亚洲xxx大片| 69**夜色精品国产69乱| 国内成人精品视频| 亚洲精品色婷婷福利天堂| 国内外成人免费激情在线视频网站| 日av在线播放中文不卡| 国产盗摄xxxx视频xxx69| 日韩一区在线视频| 精品成人国产在线观看男人呻吟| 欧美视频在线观看 亚洲欧| 91中文字幕在线| 精品中文字幕在线观看| 欧美精品久久久久久久| 欧美性猛交xxxx富婆弯腰| 正在播放国产一区| 国产日韩欧美综合| 91国内精品久久| 视频一区视频二区国产精品| 欧美伊久线香蕉线新在线| 亚洲成人久久久| 亚洲的天堂在线中文字幕| 日本久久久a级免费| 欧美午夜影院在线视频| 国产精品美女久久久久av超清| 最近中文字幕2019免费| 91精品国产乱码久久久久久蜜臀| 国产精品视频一区国模私拍| 亚洲精品电影在线| 亚洲性69xxxbbb| zzijzzij亚洲日本成熟少妇| 中文字幕欧美视频在线| 午夜精品一区二区三区在线视| 日韩在线小视频| 国语自产偷拍精品视频偷| 狠狠做深爱婷婷久久综合一区| 欧美影院成年免费版| 另类专区欧美制服同性| 精品国偷自产在线视频| 一本大道香蕉久在线播放29| 日韩亚洲欧美中文在线| www.欧美三级电影.com| 亚洲欧美在线一区二区| 亚洲午夜精品久久久久久性色| 国产亚洲精品久久久优势| 欧美超级乱淫片喷水| 欧美肥老太性生活视频| 7m第一福利500精品视频| 久热精品在线视频| 欧美麻豆久久久久久中文| 日本午夜人人精品| 美女啪啪无遮挡免费久久网站| 精品国产精品自拍| 国产精品香蕉国产| 97高清免费视频| 国产精品av在线| 久久在精品线影院精品国产| 欧美老女人性生活| 国产精品久久久久久网站| 欧美日韩国产一区中文午夜| 高清欧美电影在线| 亚洲国产精品人久久电影| 国产精品一区二区性色av| 69**夜色精品国产69乱| 久久高清视频免费| 国产999在线观看| 欧美尺度大的性做爰视频| 国产精品高潮呻吟久久av野狼| 在线亚洲男人天堂| 91精品国产沙发| 日本在线观看天堂男亚洲| 美女啪啪无遮挡免费久久网站| 欧美—级a级欧美特级ar全黄| 91精品视频免费看| 亚洲精品之草原avav久久| 欧美一级片一区| 久久综合久久八八| 日韩视频在线一区| 亚洲国产欧美一区| www.久久草.com| 久久久精品一区| 最新中文字幕亚洲| 亚洲成年人影院在线| 久久亚洲精品成人| 日韩欧美a级成人黄色| 91精品国产91久久久久久吃药| 日韩欧美高清在线视频| 欧美激情乱人伦一区| 国产精品久久色| 国产一区二区美女视频| 成人国产精品一区| 欧美在线视频观看免费网站| 亚洲大尺度美女在线| 亚洲欧美日韩天堂| 91久久精品久久国产性色也91| 日韩av在线免费播放| 久久91精品国产| 欧美黑人狂野猛交老妇| 国产精品99久久久久久久久久久久| 亚洲欧美激情精品一区二区|