美文网首页
手势解锁

手势解锁

作者: 奋斗吧程序员 | 来源:发表于2019-04-29 01:40 被阅读0次

在需要显示的控制器中写入如下代码引用

- (void)viewDidLoad {

    [super viewDidLoad];

    View*view = [[Viewalloc]initWithFrame:self.view.bounds];

    [self.viewaddSubview:view];}

//假设正确的手势是1-2-3-6-5-4-7-8-9

@interface View ()

@property (nonatomic,copy) NSMutableArray *array;//button数组

@property (nonatomic,copy) NSMutableArray *linearray;//需要划线的button数组

@property (nonatomic,assign) CGPoint lastPoint;//手指最后的位置

@property (nonatomic,copy) NSArray *gesture;//手势密码

@end

@implementation View

- (NSMutableArray *)array {

    if(!_array) {

        CGFloatspace =60;

        _array = [NSMutableArray arrayWithCapacity:9];

        CGFloatwidth =(self.frame.size.width-4*space)/3;

        for(inti=0;i<9;i++) {

            UIButton*btn = [[UIButtonalloc]initWithFrame:CGRectMake(space+(width+space)*(i%3),100+(width+space)*(i/3), width, width)];

            btn.tag= i+1;

            [btnsetImage:[UIImage imageNamed:@"normal"] forState:UIControlStateNormal];

            [btnsetImage:[UIImage imageNamed:@"select"] forState:UIControlStateSelected];

            [btnsetImage:[UIImage imageNamed:@"disable"] forState:UIControlStateDisabled];

            btn.userInteractionEnabled = NO;

            [selfaddSubview:btn];

            [_arrayaddObject:btn];

        }

    }

    return _array;

}

- (NSMutableArray*)linearray {

    if (!_linearray) {

        _linearray = [NSMutableArray arrayWithCapacity:9];

    }

    return _linearray;

}

- (instancetype)initWithFrame:(CGRect)frame {

    if(self= [superinitWithFrame:frame]) {

        [selfarray];

        self.gesture =[@"1,2,3,6,5,4,7,8,9" componentsSeparatedByString:@","];

        self.backgroundColor = [UIColor clearColor];

    }

    return self;

}

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

    UITouch*touch = touches.anyObject;

    CGPointpoint = [touchlocationInView:touch.view];

    for(UIButton*btninself.array) {

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

            btn.selected=YES;

        }

    }

}

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

    //判断手势密码是否正确

    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:9];

    for(UIButton*btninself.linearray) {

        [arraddObject:[NSStringstringWithFormat:@"%ld",(long)btn.tag]];

    }

    if(![arrisEqualToArray:self.gesture]) {

        self.lastPoint= [[self.linearraylastObject]center];

        [self setNeedsDisplay];

        for(UIButton*btninself.linearray) {

            btn.selected=NO;

            btn.enabled=NO;

        }

        self.userInteractionEnabled = NO;

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

            self.userInteractionEnabled = YES;

            [selftouchEnd];

            NSLog(@"手势错误!!!");

        });

    }else{

        [selftouchEnd];

        NSLog(@"手势正确!!!");

    }

}

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

    UITouch*touch = touches.anyObject;

    CGPointpoint = [touchlocationInView:touch.view];

    for(UIButton*btninself.array) {

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

            btn.selected=YES;

            if(![self.linearraycontainsObject:btn]) {

                [self.linearrayaddObject:btn];

            }

        }

    }

    self.lastPoint= point;

    [self setNeedsDisplay];

}

- (void)touchEnd {

    for(UIButton*btninself.array) {

        btn.selected=NO;

        btn.enabled=YES;

    }

    [self.linearray removeAllObjects];

    [self setNeedsDisplay];

}

- (void)drawRect:(CGRect)rect {

    if(self.linearray.count==0) {

        return;

    }

    UIBezierPath *path = [UIBezierPath bezierPath];

    for(inti=0; i

        UIButton*btn =self.linearray[i];

        if(i==0) {

            [pathmoveToPoint:btn.center];

        }else{

            [pathaddLineToPoint:btn.center];

        }

    }

    [pathaddLineToPoint:self.lastPoint];

    path.lineWidth=5;

    path.lineCapStyle = kCGLineCapRound;

    path.lineJoinStyle = kCGLineJoinRound;

    [[UIColor blueColor] set];

    [pathstroke];

}

@end

相关文章

  • iOS指纹解锁和手势解锁

    iOS指纹解锁和手势解锁 iOS指纹解锁和手势解锁

  • DrawRect绘图实现手势密码控件

    公司项目中除了之前的指纹解锁外,还有手势解锁,这就扯到了手势解锁的功能实现 其实核心就是利用touchBegin,...

  • 手势解锁

    金融产品手势解锁是常见的东西了,这里把我自己实现的记录一下。 自定义View的流程一般都是onMeasure跟on...

  • 手势解锁

    分析界面,当手指在上面移动时,当移动到一个按钮范围内当中, 它会把按钮给成为选中的状态.并且把第一个选中的按钮当做...

  • 手势解锁

    效果 实现思路 1.继承UIview 包含 所有子按钮的数组 按钮设置不可交互 有选中 和 未选中的图片2.布局...

  • 手势解锁

    首先看下我们要制作功能的效果如图所示: 思路介绍 手势密码一般为9宫格模式,通过手势滑动设置一个多边形(polyg...

  • 手势解锁

    下班回家,随便写写,写了个手势解锁,很多app都有。自己封装了一个,手势解锁视图。代码如下:头文件 源文件: 使用...

  • 手势解锁

  • 手势解锁

    手势解锁 界面搭建 自定义控制器的view 只要在view上面画东西,就要用到drawRect方法 加载图片 九宫...

  • 手势解锁

    1.最终效果图 2.思路: 2.1.首先把界面搭建起来:以绘制九宫格的方式,在view上绘制出九个button 2...

网友评论

      本文标题:手势解锁

      本文链接:https://www.haomeiwen.com/subject/uqfenqtx.html