利用KKGestureLockView 实现的绘制图形锁,解锁,修改锁 的demo
2015-07-08 10:14
465 查看
大家自己导入KKGestureLockView
在第一个ViewController 里面添加几个跳转按钮,下面是按钮方法
- (IBAction)setPSDBtnClick:(id)sender {
ZDViewController * vc = [[ZDViewControlleralloc]init];
vc.type =0;
[selfpresentViewController:vc
animated:TRUEcompletion:nil];
}
- (IBAction)refiyBtnClick:(id)sender {
ZDViewController * vc = [[ZDViewControlleralloc]init];
vc.type =1;
[selfpresentViewController:vc
animated:TRUEcompletion:nil];
}
- (IBAction)changePSDBtnClick:(id)sender {
ZDViewController * vc = [[ZDViewControlleralloc]init];
vc.type =2;
[selfpresentViewController:vc
animated:TRUEcompletion:nil];
}
type 这个是类型,为了告诉ZDViewController 这次是绘制图形锁,还是解锁或者是修改锁
接下来是跳转后的ZDViewController里面实现方法
#import <***Foundation/***Foundation.h>
#import "ZDViewController.h"
@interface
ZDViewController ()
{
KKGestureLockView * lockView;
int wrongTimes;//记录错误的次数
NSString * lastString;//记录上次的密码
BOOL isRight;
}
@end
@implementation ZDViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
//为图形锁设置背景图片
UIImageView * backImageView = [[UIImageViewalloc]initWithFrame:self.view.frame];
backImageView.image = [UIImageimageNamed:@"123.jpg"];
backImageView.userInteractionEnabled =TRUE;
[self.viewaddSubview:backImageView];
//设置lockview的各种基本设置
lockView = [[KKGestureLockViewalloc]initWithFrame:CGRectMake(0,0,
self.view.bounds.size.width,self.view.bounds.size.height)];
lockView.backgroundColor = [[UIColorblackColor]
colorWithAlphaComponent:0.2];
lockView.normalGestureNodeImage = [UIImageimageNamed:@"gesture_node_normal.png"];
lockView.selectedGestureNodeImage = [UIImageimageNamed:@"gesture_node_selected.png"];
lockView.lineColor = [[UIColororangeColor]
colorWithAlphaComponent:0.4
];
lockView.lineWidth =12;
lockView.delegate =self;
lockView.contentInsets =UIEdgeInsetsMake(100,20,
100,
20);
[self.viewaddSubview:lockView];
wrongTimes =
0; //错误次数
//设置密码
if(self.type ==0)
{
lockView.tipLabel.text =@"请滑动绘制密码";
}
//验证密码
if (self.type ==1)
{
lockView.tipLabel.text =@"请滑动输入密码";
}
//修改密码
if (self.type ==2)
{
lockView.tipLabel.text =@"请输入旧密码";
}
lastString =
nil;
}
- (void)gestureLockView:(KKGestureLockView *)gestureLockView didBeginWithPasscode:(NSString
*)passcode{
NSLog(@"==%@",passcode);
}
- (void)gestureLockView:(KKGestureLockView *)gestureLockView didEndWithPasscode:(NSString
*)passcode{
NSLog(@"--%@",passcode);
if(passcode.length<7)
{
//绘制小于四个点,直接返回
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"请至少绘制四个点"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
return;
}
//设置密码
if(self.type ==0)
{
if (lastString)//存在,代表第二次输入
{
if ([lastStringisEqualToString: passcode])
{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"成功"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
//成功后,将lastString置空,并且将密码保存在本地
lastString =
nil;
[[NSUserDefaultsstandardUserDefaults]
setObject:passcodeforKey:@"psd"];
[[NSUserDefaultsstandardUserDefaults]
synchronize];
[selfdismissViewControllerAnimated:TRUEcompletion:nil];
}else
{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"两次不一致"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
lastString =
nil;
lockView.tipLabel.text =@"请重新滑动绘制密码";
[selfshapeTheLockViewTiplabel];
return;
}
}else
{
lockView.tipLabel.text =@"请再次滑动绘制密码";
lastString = passcode;
}
}
//验证密码
if (self.type ==1)
{
if ([passcodeisEqualToString:[[NSUserDefaultsstandardUserDefaults]
objectForKey:@"psd"]])
{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"登录成功"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
[selfdismissViewControllerAnimated:TRUEcompletion:nil];
}else
{
wrongTimes ++ ;
if (wrongTimes ==5) {
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"请重新登录"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
return;
}
NSString * textString = [NSStringstringWithFormat:@"密码不正确,还剩下%d次机会",5-wrongTimes];
lockView.tipLabel.text = textString;
[selfshapeTheLockViewTiplabel];
}
}
//修改密码
if (self.type ==2)
{
if (isRight ==FALSE)
{
//输入密码成功后,让isRight为yes
if ([passcodeisEqualToString:[[NSUserDefaultsstandardUserDefaults]
objectForKey:@"psd"]])
{
//旧密码输入成功
lockView.tipLabel.text =@"请滑动绘制新密码";
isRight =
TRUE;
}else
{
lockView.tipLabel.text =@"旧密码绘制错误";
[selfshapeTheLockViewTiplabel];
}
return;
}
if (lastString)//存在,代表第二次输入
{
if ([lastStringisEqualToString: passcode])
{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"成功"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
//成功后,将lastString置空,并且将密码保存在本地
lastString =
nil;
[[NSUserDefaultsstandardUserDefaults]
setObject:passcodeforKey:@"psd"];
[[NSUserDefaultsstandardUserDefaults]
synchronize];
[selfdismissViewControllerAnimated:TRUEcompletion:nil];
}else
{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"两次不一致"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
[alertshow];
lastString =
nil;
lockView.tipLabel.text =@"请重新滑动绘制密码";
[selfshapeTheLockViewTiplabel];
return;
}
}else
{
lockView.tipLabel.text =@"请再次滑动绘制密码";
lastString = passcode;
}
}
}
//让label摇晃的动画
-(void)shapeTheLockViewTiplabel
{
CAKeyframeAnimation * shakeAnima = [CAKeyframeAnimationanimationWithKeyPath:@"transform.rotation"];
// 2.
设置动画属性
[shakeAnima setValues:@[@(12.0f*M_PI/180.0f),@(-12.0f*M_PI/180.0f),@(12.0f*M_PI/180.0f),@(0.0f*M_PI/180.0f)]];
shakeAnima.repeatCount=1;
[lockView.tipLabel.layeraddAnimation:shakeAnima
forKey:@"1"];
//让手机震动 这里是摘抄文顶顶的博客代码
NSURL *url=[[NSBundlemainBundle]URLForResource:@"glass.wav"withExtension:nil];
SystemSoundID soundID=0;
AudioServicesCreateSystemSoundID((__bridgeCFURLRef)url,
&soundID);
AudioServicesPlayAlertSound(soundID);
}
相关文章推荐
- python 之 input() vs. raw_input()
- 请尽量不要为全局变量赋不必要的初值!
- 两种启动监听器ApplicationListener和ServletContextListener
- 用来处理日常事务的 Linux 程序
- 7月初“.我爱你”域名市场报告: 阿里云获双料冠军
- android:sharedUserId问题解析
- OC对象给分类添加属性
- Hadoop集群系列(目录)
- Python中文字符问题
- 三、openCV学习笔记(Image Processing)
- 【rman,1】经典案例增量备份
- Application_Start 多次启动问题
- iphone4s从8.x.x降级到6.1.3变成可能
- js读取xml文件
- Python写入CSV文件的方法
- 整合Struts2与Spring的步骤
- 把word文档内容转换为pdf格式经验分享
- Windows 10正式版核心应用迎来新一轮更新
- Selenium WebDriver 中鼠标和键盘事件分析及扩展
- 【Unity3D】 DoTween实现飘字的效果