在iOS上增加手势锁屏、解锁功能
在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的。
桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开电脑自动锁定”或者“闲置锁定”等类似功能,具体我也忘了。
而在iPhone版的QQ上,也提供了手势锁的功能。如下图:
我在上一篇博文中简单提到如何根据手指移动画线条,而这里是进一步的版本,仍然只是粗糙原型:
具体的代码实现如下:
[cpp]
//
// 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
@inte易做图ce 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]; <
补充:移动开发 , IOS ,