IOS 手勢密碼 解決
在iOS上增長手勢鎖屏、解鎖功能 ide
具體的代碼實現以下: atom
- //
- // 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
歡迎關注本站公眾號,獲取更多信息