iOS手势密码

在iOS上增加手势锁屏、解锁功能

 

 

具体的代码实现如下:

 

 

//  ViewController.m  

//  GestureLock  

//  

//  Created by Jason Lee on 12-9-26.  

//  Copyright (c) 2012年 Jason Lee. All rights reserved.  

//  

   

#import "ViewController.h"  

   

#define LOCK_POINT_TAG      1000  

   

@interface ViewController ()  

   

@property (nonatomic, strong) UIImageView *imageView;  

   

@property (nonatomic, assign) CGPoint lineStartPoint;  

@property (nonatomic, assign) CGPoint lineEndPoint;  

   

@property (nonatomic, strong) NSMutableArray *buttonArray;  

@property (nonatomic, strong) NSMutableArray *selectedButtons;  

   

@property (nonatomic, assign) BOOL drawFlag;  

   

@property (nonatomic, strong) UIImage *pointImage;  

@property (nonatomic, strong) UIImage *selectedImage;  

   

@end  

   

@implementation ViewController  

   

- (void)dealloc  

{  

     [super dealloc];  

     //  

     [_imageView release];  

     [_buttonArray release];  

     [_selectedButtons release];  

     [_pointImage release];  

     [_selectedImage release];  

}  

   

- (void)viewDidLoad  

{  

     [super viewDidLoad];  

     // Do any additional setup after loading the view, typically from a nib.  

       

     _imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];  

     [self.view addSubview:self.imageView];  

     self.imageView.backgroundColor = [UIColor whiteColor];  

       

     [self createLockPoints];  

}  

   

- (void)didReceiveMemoryWarning  

{  

     [super didReceiveMemoryWarning];  

     // Dispose of any resources that can be recreated.  

}  

   

#pragma mark - Trace Touch Point  

   

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

{  

     UITouch *touch = [touches anyObject];  

     if (touch) {  

         for (UIButton *btn in self.buttonArray) {  

             CGPoint touchPoint = [touch locationInView:btn];  

             if ([btn pointInside:touchPoint withEvent:nil]) {  

                 self.lineStartPoint = btn.center;  

                 self.drawFlag = YES;  

                   

                 if (!self.selectedButtons) {  

                     self.selectedButtons = [NSMutableArray arrayWithCapacity:9];  

                 }  

                   

                 [self.selectedButtons addObject:btn];  

                 [btn setImage:self.selectedImage forState:UIControlStateNormal];  

             }  

         }  

     }  

}  

   

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

{  

     UITouch *touch = [touches anyObject];  

     if (touch && self.drawFlag) {  

         self.lineEndPoint = [touch locationInView:self.imageView];  

           

         for (UIButton *btn in self.buttonArray) {  

             CGPoint touchPoint = [touch locationInView:btn];  

               

             if ([btn pointInside:touchPoint withEvent:nil]) {  

                 BOOL btnContained = NO;  

                   

                 for (UIButton *selectedBtn in self.selectedButtons) {  

                     if (btn == selectedBtn) {  

                         btnContained = YES;  

                         break;  

                     }  

                 }  

                   

                 if (!btnContained) {  

                     [self.selectedButtons addObject:btn];  

                     [btn setImage:self.selectedImage forState:UIControlStateNormal];  

                 }  

             }  

         }  

           

         self.imageView.image = [self drawUnlockLine];  

     }  

}  

   

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

{  

     [self outputSelectedButtons];  

       

     self.drawFlag = NO;  

     self.imageView.image = nil;  

     self.selectedButtons = nil;  

}  

   

- (void)createLockPoints  

{  

     self.pointImage = [UIImage imageNamed:@"blue_circle"];  

     self.selectedImage = [UIImage imageNamed:@"yellow_circle"];  

       

     float marginTop = 100;  

     float marginLeft = 45;  

       

     float y;  

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

         y = i * 100;  

         float x;  

         for (int j = 0; j < 3; ++j) {  

             x = j * 100;  

             UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];  

             [btn setImage:self.pointImage forState:UIControlStateNormal];  

             [btn setImage:self.selectedImage forState:UIControlStateHighlighted];  

             btn.frame = (CGRect){x+marginLeft, y+marginTop, self.pointImage.size};  

             [self.imageView addSubview:btn];  

             btn.userInteractionEnabled = NO;  

             btn.tag = LOCK_POINT_TAG + i * 3 + j;  

               

             if (!self.buttonArray) {  

                 self.buttonArray = [NSMutableArray arrayWithCapacity:9];  

             }  

             [self.buttonArray addObject:btn];  

         }  

     }  

}  

   

#pragma mark - Draw Line  

   

- (UIImage *)drawUnlockLine  

{  

     UIImage *image = nil;  

       

     UIColor *color = [UIColor yellowColor];  

     CGFloat width = 5.0f;  

     CGSize imageContextSize = self.imageView.frame.size;  

       

     UIGraphicsBeginImageContext(imageContextSize);  

       

     CGContextRef context = UIGraphicsGetCurrentContext();  

       

     CGContextSetLineWidth(context, width);  

     CGContextSetStrokeColorWithColor(context, [color CGColor]);  

       

     CGContextMoveToPoint(context, self.lineStartPoint.x, self.lineStartPoint.y);  

     for (UIButton *selectedBtn in self.selectedButtons) {  

         CGPoint btnCenter = selectedBtn.center;  

         CGContextAddLineToPoint(context, btnCenter.x, btnCenter.y);  

         CGContextMoveToPoint(context, btnCenter.x, btnCenter.y);  

     }  

     CGContextAddLineToPoint(context, self.lineEndPoint.x, self.lineEndPoint.y);  

       

     CGContextStrokePath(context);  

       

     image = UIGraphicsGetImageFromCurrentImageContext();  

       

     UIGraphicsEndImageContext();  

       

     return image;  

}  

   

#pragma mark -   

   

- (void)outputSelectedButtons  

{  

     for (UIButton *btn in self.selectedButtons) {  

         [btn setImage:self.pointImage forState:UIControlStateNormal];  

         NSLog(@"Selected-button's tag : %d\n", btn.tag);  

     }  

}  

   

@end   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值