zoukankan      html  css  js  c++  java
  • OC屏幕手势解锁

    感觉屏幕解锁好像很牛的样子,所以试着写了一个,代码很简单,手势用到的也是原生的,如果该代码帮助了你,记得点赞,如果该代码有任何问题,也可以随时和我联系。改代码用到的两张图片,是我随便找的两张,可以自行找图片代替

    效果图:

    需要用到的代码:

    ScreenLockView.h

    #import <UIKit/UIKit.h>
    
    @interface ScreenLockView : UIView
    @property(nonatomic,copy)void(^blockScreenPas)(NSString *pas);
    @end
    

    ScreenLockView.m

    #import "ScreenLockView.h"
    
    #define Row 3 //3行
    #define Col 3 //3列
    #define Width 50 //这边宽度和高度一样,都设置为50
    
    @interface ScreenLockView ()
    @property(nonatomic,strong)NSMutableArray *choseArr;
    @property(nonatomic,assign)CGPoint currPoint;
    @end
    
    @implementation ScreenLockView
    -(instancetype)initWithFrame:(CGRect)frame{
        self = [super initWithFrame:frame];
        if(self){
            self.backgroundColor = [UIColor whiteColor];
            
            self.choseArr = [NSMutableArray array];
            for(int i = 0 ; i < 9 ; i++){
                
                UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
                int row = i / Row;//行
                int col = i % Col;//列
               
                //行间距
                int rowMargin = (frame.size.width - Width * Row)/(Row-1);
                //列间距
                int colMargin = (frame.size.height - Width * Col)/(Col-1);
                btn.frame = CGRectMake((Width+rowMargin)*col, (colMargin+Width)*row, Width,  Width);
                
                [btn setImage:[UIImage imageNamed:@"noChose"] forState:UIControlStateNormal];
                [btn setImage:[UIImage imageNamed:@"chose"] forState:UIControlStateSelected];
                btn.tag = i;
                [self addSubview:btn];
                btn.userInteractionEnabled = NO;
            }
        }
        return self;
    }
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [touches anyObject];
        CGPoint touchPoine = [touch locationInView:self];
        [self isContainsWithPoint:touchPoine];
        
    }
    -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [touches anyObject];
        CGPoint touchPoine = [touch locationInView:self];
        [self isContainsWithPoint:touchPoine];
         self.currPoint = touchPoine;
         [self setNeedsDisplay];
    }
    -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSString *pas = @"";
        for(UIButton *btn in self.choseArr){
            btn.selected = NO;
            pas = [pas stringByAppendingString:[NSString stringWithFormat:@"%ld",(long)btn.tag]];
        }
        if(self.blockScreenPas){
            self.blockScreenPas(pas);
        }
        
        [self.choseArr removeAllObjects];
        [self setNeedsDisplay];
        
        
    }
    /**
     判断point是否被UIButton的frame包含
     */
    -(void)isContainsWithPoint:(CGPoint)point{
        for(UIButton *btn in [self subviews]){
            if(CGRectContainsPoint(btn.frame ,point )&& ![self.choseArr containsObject:btn]){
                [self.choseArr addObject:btn];
                btn.selected = YES;
               
            }
        }
    
    }
    
    - (void)drawRect:(CGRect)rect {
        UIBezierPath * path = [UIBezierPath bezierPath];
        for(int i=0;i<self.choseArr.count;i++){
            UIButton *btn = self.choseArr[i];
            if(i == 0){
                [path moveToPoint:btn.center];//起始点
            }else{
                 [path addLineToPoint:btn.center];
            }
        }
      
        [path addLineToPoint:self.currPoint];
        
        [path setLineWidth:2.f];
        [[UIColor redColor] set];
        [path stroke];
        
    }
    
    
    @end
    

     使用:

    ScreenLockView *lockView = [[ScreenLockView alloc]initWithFrame:CGRectMake(0, 0, 260, 260)];
        lockView.center = self.view.center;
        [self.view addSubview:lockView];
        
        
        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 260, 30)];
        label.textAlignment = NSTextAlignmentCenter;
        label.center = CGPointMake(self.view.center.x, lockView.frame.origin.y+lockView.frame.size.height+50);
        [self.view addSubview:label];
        
        lockView.blockScreenPas = ^(NSString *pas) {
            label.text = pas;
        };
    
  • 相关阅读:
    抽象工厂模式
    python 工厂方法
    采用__call__ 实现装饰器模式
    策略模式
    采集15个代理IP网站,打造免费代理IP池
    grid网格布局——色子布局
    观察者模式
    搭建免费代理池---采集代理(1)
    python 爬虫 user-agent 生成
    多进程 + 多线程抓取博客园信息
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/10071940.html
Copyright © 2011-2022 走看看