高仿支付宝手势解锁

涉及知识:

  1. 贝塞尔曲线的使用
  2. 协议、代理模式的使用

    实现思路

    1.新建一个类,继承UIView,取名为ZFLockView。在initWithFrame方法中调用自定义方法layoutBtn对按钮进行九宫格布局。这里需要注意的是按钮必须关掉交互的功能,也就是btn.userInteractionEnabled = NO;否则,下面获取按钮的坐标时候获取不到。因为是用for循环来创建按钮,那么每个按钮的tag就用标记为当前的i吧。

    2.在touchesBegan方法里面获取当前触摸的点,并且判断这个触摸点在不在按钮上,如果在按钮上,就让这个按钮成为被选中状态,并且加入到可变数组中。否则,不做任何操作。然后调用setNeedsDisplay方法,这个方法会调用drawRect。这样设计的意思是:当你第一次点击屏幕时候,在按钮上,按钮就被选中,被选中就显示被选中的图片。不在按钮上,那么什么都不做。

    3.touchesMoved方法里面获取当前触摸的点,并且判断这个触摸点在不在按钮上,如果在按钮上,就让这个按钮成为被选中状态,并且加入到可变数组中。如果不在按钮上,那么就保存当前触摸的点。保存这个点在drawRect会用到。然后调用setNeedsDisplay方法。这样设计的意思是:当你手指在屏幕移动时候,经过了按钮,那么按钮就被选中,不经过按钮,那么会有一根线跟着你的手指(这根线连出来的点就是你刚才临时保存的点)

    4.touchesEnded和touchesCancelled方法里面使用代理方法lockView:didFinishPath:。先判断代理方法存在不,如果存在就遍历可变数组中选中的按钮,并且把每个按钮的tag取出来拼接在一个NSMultableString中当做密码存储,并且通过lockView:didFinishPath:把刚才密码路径传出去。

    5.在控制器中重写lockView:didFinishPath:方法,用传过来的密码路径和预设的密码对比,如果一样就显示密码正确。否则,密码错误。用UIAlertController来提示用户,在用户点击确定后,清空ZFLockView中可变数组中选中的按钮,然后用forin遍历ZFLockView中子控件(实际上就是布局的九宫格按钮),把所有按钮选中状态设置为NO,最后再条用setNeedsDisplay,完毕!
    这里写图片描述

    这里写图片描述

    这里写图片描述

    代码参考:https://github.com/HZhenF/LockGesture.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值