XMG Quartz2D 手势解锁(九宫格)

直接贴源码了


#import "WNDrawView.h"


@interface WNDrawView()


@property(nonatomic,strong)NSMutableArray*dataArray;


@end


@implementation WNDrawView

{

    CGPoint _currentPoint;

}


//对应xib的类不会进入该方法

-(instancetype)initWithFrame:(CGRect)frame{

    

    if (self=[super initWithFrame:frame]) {

        

    }

    return self;

}


-(void)awakeFromNib{

    

    

    [self addGestureRecognizer:[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panClick:)]];

    //创建9btn

    

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

        

        

        UIButton*btn=[UIButton buttonWithType:UIButtonTypeCustom];

        [self addSubview:btn];

        btn.tag=i;

        [btn setImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];

        [btn setImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];

    }

    

}

//在这个里面拿到的父控件的尺寸才是最准确的

-(void)layoutSubviews{

    

    NSUInteger count=self.subviews.count;

    CGFloat width=74.0f;

    CGFloat height=width;

    

    CGFloat gapW=(375-width*3)/4;

    CGFloat gapH=(400-height*3)/4;

    for (NSUInteger i=0; i<count; i++) {

        UIButton*btn=self.subviews[i];

        //

        CGFloat row=i/3;

        //

        CGFloat col=i%3;

        

        btn.frame=CGRectMake((width+gapW)*col+gapW, gapH+(gapH+height)*row, width, height);


    }

}



#pragma mark - 按钮点击


-(void)panClick:(UIPanGestureRecognizer*)pan{

    

    

    _currentPoint=[pan locationInView:self];

    for (UIButton*btn in self.subviews) {

        

        if (CGRectContainsPoint(btn.frame, _currentPoint)&&![self.dataArray containsObject:btn]) {

            

            btn.selected=YES;

            [self.dataArray addObject:btn];

            //如果放在里面就只是选中的时候才会划线

            

        }

    }

    if (pan.state==UIGestureRecognizerStateEnded) {

        

        NSMutableString*str=[NSMutableString string];

        for (UIButton*btn in self.dataArray) {

            [str appendFormat:@"%ld",btn.tag];

        }

        

        NSLog(@"%@",str);

        //让选中状态全部取消。然后绘制的话,线自然就全都清除了

//        [self.dataArray makeObjectsPerformSelector:@selector(setSelected:) withObject:@(NO)];

        for (UIButton* btn in self.dataArray ) {

            [btn setSelected:NO];

        }

        

        //然后删除数组中的所有元素。下次再次添加锁屏的时候数组为空

        [self.dataArray removeAllObjects];

        

    }

    

    

    [self setNeedsDisplay];

    

}


-(void)drawRect:(CGRect)rect{

    

    if(self.dataArray.count==0)return;

    

    UIBezierPath*path=[UIBezierPath bezierPath];

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

        UIButton*btn=self.dataArray[i];

        if (i==0) {

            [path moveToPoint:btn.center];

        }else{

            [path addLineToPoint:btn.center];

        }

    }

    [path addLineToPoint:_currentPoint];

    

    //stroke相关

    path.lineWidth=10;

    path.lineJoinStyle=kCGLineJoinRound;

    [[UIColor greenColor] setStroke];

    [path stroke];

}



#pragma mark - getter&setter



-(NSMutableArray *)dataArray{

    

    if (_dataArray==nil) {

        _dataArray=[NSMutableArray array];

    }

    return _dataArray;

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值