手势解锁

作者: lotawei | 来源:发表于2016-12-05 20:27 被阅读3次

效果

效果 解锁

实现思路

1.继承UIview 包含 所有子按钮的数组 按钮设置不可交互 有选中 和 未选中的图片
2.布局
3.重写touchmove end 手势 刷新视图
4.move中设置当前数组哪些按钮需要被选中链接按钮的笔划刷新视图
5.end中结束时查看被选中的按钮并将选中的记录为手势密码然后重置数组中所有按钮为不选中,刷新视图

  • 自定义视图
    #import "customview.h"
    @interface customview()
    @property (nonatomic,strong) NSMutableArray *btns;// 各个部分 数组
    @property (nonatomic,strong) NSString *answer ;//密码
    @end

  • 实现
    @implementation customview
    -(NSString *)answer{
    return @"13457";
    }
    -(NSMutableArray *)btns
    {
    if (_btns==nil) {
    _btns=[NSMutableArray array];
    }
    return _btns;
    }
    -(instancetype)initWithFrame:(CGRect)frame
    {
    if (self=[super initWithFrame:frame]) {
    [self setBtns];
    self.backgroundColor=[UIColor colorWithRed:209/255.0 green:221/255.0 blue: 234/255.0 alpha:1];
    }
    return self;
    }
    -(void)setBtns
    {
    for (int i=0; i<9; i++) {
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
    [btn setImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];
    btn.userInteractionEnabled=NO;
    //为其设置 tag
    btn.tag = i;
    [self addSubview:btn];

      }
      }
    
      -(void )touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
      {
          //获取当前的坐标点
          UITouch    *touch=[touches  anyObject];
          CGPoint    positionpoint=[touch  locationInView:self];
          for (UIButton  *btn in self.subviews) {
              //当前的 选择的点是否在 按钮中
              if (CGRectContainsPoint(btn.frame, positionpoint)) {
          
                  if (btn.selected==NO) {
                      [self.btns addObject:btn];
                      [self  setNeedsDisplay];
                  }
                  btn.selected=YES;
              }
          }
      }
      //这里按钮没有位置没定  因此重写,重新布局
      -(void)layoutSubviews
      {
          [super  layoutSubviews];
          NSInteger   cout=self.subviews.count;
          CGFloat     xpadding=(self.bounds.size.width-3*74)/4;
          CGFloat    ypadding=(self.bounds.size.height-3*74)/4;
          CGFloat    x=0;
          CGFloat    y=0;
          for (int i=0; i<cout; i++) {
              x=xpadding*((i%3)+1)+74*(i%3);
              y=ypadding*((i/3)+1)+74*(i/3);
              UIButton    *btn=self.subviews [i];
              [btn setFrame:CGRectMake(x, y , 74, 74)];
          }
      }
      -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
      {
    
          //移除之前   讲当前  选中的 按钮和 答案比对
          NSMutableString   *result = [[NSMutableString   alloc]initWithCapacity:0];
          //记录路径
          for (UIButton  *btn in self.subviews) {
              if (btn.selected) {
                  NSString    *aw = [NSString  stringWithFormat:@"%ld",(long)btn.tag];
                  [result appendString:aw];
              }
              [btn  setSelected:NO];
          }
          if ([result isEqualToString:self.answer]) {
              NSLog(@"恭喜你解锁成功");//跳转
          }
          else{
              //错误怎么办?  发挥自己的想象 1.计数  错误三次就拜拜 2.高亮显示一些东西
          }
          [self.btns  removeAllObjects];
          [self setNeedsDisplay];
      }
    
      - (void)drawRect:(CGRect)rect {
          NSInteger  cout=self.btns.count;
          UIBezierPath   *path=[UIBezierPath  bezierPath];
          for (NSInteger  i=0; i<cout; i++) {
              CGPoint  point=[self.btns[i]  center];
              if (i==0) {
                  [path  moveToPoint:point];
              } 
              else
              {
                  [path  addLineToPoint:point];
              }
          }
          [[UIColor  whiteColor] setStroke];
          path.lineWidth=3;
          [path stroke];
      }
      @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/szhlmttx.html