iosios11锁屏方式式有哪些

后使用快捷导航没有帐号?
只需一步,快速开始
查看: 15474|回复: 10
积分640精华0主题帖子威望2 活跃1057 PP币900 PP豆1603 阅读权限10最后登录
, 积分 640, 距离下一级还需 160 积分
该用户从未签到威望2 活跃1057 PP币900 PP豆1603
在上个月初的 WWDC 大会上发布了 iOS 10 系统,新系统带来了诸多特性以及优化。但是大家熟悉的滑动解锁,在iOS 10 系统中被取消了,我们并不能通过在屏幕上向右滑实现解锁。如果你想体验到之前的滑动解锁,可以试试下面的方法。
10:37 上传
需要的工具:
  1. 能备份和恢复的工具,本教程使用的是 。
  2. 用于读取备份内容并修改内容的 iBackupBot.exe。
  第一步,给
10:37 上传
第二步,打开 iBackupBot.exe,找到刚刚的备份,打开文件目录 System files - HomeDomin - library - Preferences,然后找到文件 com.apple.springboard.plist 并打开。
10:37 上传
如果出现下图的情况,可以直接点击 Cancel 或者右上角的“X”。
10:37 上传
第三步,我们需要修改这个文件的内容,添加代码即可回归 iOS 9 的解锁方式:
  &key&SBEnableDashBoard&/key&
  &false/&
  添加下面的代码可以实现在多任务列表的时候上滑主屏幕注销设备:
  &key&SBKillableInAppSwitcher&/key&
  &true/&
  添加的位置:
10:37 上传
需要注意的是,锋友们在进行操作的时候一定要注意备份这个文件的内容再进行修改,一旦出现了问题还可以重新恢复。另外,修改了之后需要保存才能生效。
  第四步:前往 iTunes 恢复备份,恢复完成后即变成了 iOS 9 的解锁方式。
  锋友 TonyZGC 表示,修改完成之后,iPhone 很有可能会出现不支持指纹解锁的情况,这是 iOS 10 改 iOS 9 模式的兼容问题。解决这个问题的方法就是找到 com.apple.springboard.plist 并打开,然后删掉之前修改的内容,再恢复设备即可。
积分593精华0主题帖子威望3 活跃969 PP币815 PP豆1485 阅读权限10最后登录
, 积分 593, 距离下一级还需 207 积分
该用户从未签到威望3 活跃969 PP币815 PP豆1485
不厌其烦啊
积分631精华0主题帖子威望5 活跃1049 PP币873 PP豆1818 阅读权限10最后登录
, 积分 631, 距离下一级还需 169 积分
该用户从未签到威望5 活跃1049 PP币873 PP豆1818
这好像看不懂
积分2185精华0主题帖子威望1 活跃2940 PP币3219 PP豆24 阅读权限50最后登录
, 积分 2185, 距离下一级还需 815 积分
TA的每日心情擦汗 11:34签到天数: 19 天连续签到: 0 天[LV.4]偶尔看看III威望1 活跃2940 PP币3219 PP豆24
有点意思,我试试看
积分52精华0主题帖子威望0 活跃16 PP币126 PP豆428 阅读权限0最后登录
该用户从未签到威望0 活跃16 PP币126 PP豆428
提示: 作者被禁止或删除 内容自动屏蔽
积分11436精华0主题帖子威望2 活跃19602 PP币3854 PP豆14928 阅读权限90最后登录
TA的每日心情开心12&小时前签到天数: 1625 天连续签到: 177 天[LV.Master]伴坛终老威望2 活跃19602 PP币3854 PP豆14928
楼主就是给力!
积分6精华0主题帖子威望0 活跃11 PP币8 PP豆40 阅读权限10最后登录
, 积分 6, 距离下一级还需 94 积分
该用户从未签到威望0 活跃11 PP币8 PP豆40
ibackupbot 读取10.2的备份出错啊,有什么解决办法吗
积分6精华0主题帖子威望0 活跃12 PP币8 PP豆43 阅读权限10最后登录
, 积分 6, 距离下一级还需 94 积分
该用户从未签到威望0 活跃12 PP币8 PP豆43
坛友 TonyZGC 表示,修改完成之后,iPhone 很有可能会出现不支持指纹解锁的情况,这是 iOS 10 改 iOS 9 模式的兼容问题。解决这个问题的方法就是找到 com.apple.springboard.plist 并打开,然后删掉之前修改的内容,再恢复设备即可。&&删除恢复是否还是9系统解锁模式?
积分6精华0主题帖子威望0 活跃12 PP币8 PP豆43 阅读权限10最后登录
, 积分 6, 距离下一级还需 94 积分
该用户从未签到威望0 活跃12 PP币8 PP豆43
删除恢复是否还是9系统解锁模式?
积分52精华0主题帖子威望3 活跃59 PP币126 PP豆793 阅读权限10最后登录
, 积分 52, 距离下一级还需 48 积分
TA的每日心情郁闷 13:55签到天数: 22 天连续签到: 1 天[LV.4]偶尔看看III威望3 活跃59 PP币126 PP豆793 设备iPhone7P
楼主,你一定要hold住
Copyright&
Guangzhou UC Network Technology Co., Ltd. All Rights Reserved. 广州优视网络科技有限公司 版权所有
请填写客服满意度
请填写产品满意度iOS锁屏问题解决方式
第一种方式可以写函数判断
int hasBlankedS
static void setScreenStateCb()
#if 0//是否锁屏
__block int token =
notify_register_dispatch("com.apple.springboard.lockstate",&token,dispatch_get_main_queue(),^(int t){
notify_get_state(token, &locked);
NSLog(@"是否锁着%d",(int)locked);
//是否亮屏
__block int token =
notify_register_dispatch("com.apple.springboard.hasBlankedScreen",&token,dispatch_get_main_queue(),^(int
notify_get_state(token, &locked);
NSLog(@"是否亮屏%d",(int)locked);
hasBlankedScreen = (int)
第二种方式用系统的通知来处理
//监听锁屏
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
// observer
displayStatusChanged,
// callback
CFSTR("com.apple.springboard.hasBlankedScreen"),
// event name
CFNotificationSuspensionBehaviorDeliverImmediately);
static void displayStatusChanged(CFNotificationCenterRef center,
void *observer, CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
// the "com.apple.springboard.lockcomplete" notification will always come after the "com.apple.springboard.lockstate" notification
CFStringRef nameCFString = (CFStringRef)
NSString *lockState = (__bridge NSString*)nameCFS
NSLog(@"Darwin notification NAME = %@",name);
if([lockState
isEqualToString:@"com.apple.springboard.hasBlankedScreen"])
UIApplication *app=[UIApplication sharedApplication];
if (app.applicationState==UIApplicationStateActive)
[[NSNotificationCenter defaultCenter]postNotificationName:@"isPlay"
object:nil
userInfo:[NSNumber numberWithInteger:1]];
[[NSNotificationCenter defaultCenter]postNotificationName:@"isPlay"
object:nil
userInfo:[NSNumber numberWithInteger:0]];
//Logic to disable the GPS
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!升级iOS 10之后,正确的解锁方式是怎样的?
刚升级到iOS 10的小伙伴最直观的感受可能就是锁屏界面的改变了。从前只要按下电源键点亮屏幕,手指轻触Home键(不需要按下)就能轻松解锁手机。而现在则必须按下Home键才行(广大非iPhone 7用户),好麻烦!但真相可能并非如此,今天小编就在这里为大家做一个小科普:关于iOS 10最新解锁界面的正确打开方式。
首先,在最新推送的iOS 10上,锁屏状态通过按下电源键点亮屏幕之后,用手指轻触Home键,实际上手机是已经解锁了的,不信请看如下截图:
虽然手机已经解锁,但与iOS 9不同的是,此时手机还处在解锁界面而没有进入主屏,系统仍然处在等待状态:用户可以通过按下Home键去到主屏,或者点击某个应用的Widget进入应用,这个步骤由用户自由选择。下面的GIF动图可能更直观,如果亮屏之后不轻触Home键,则无法顺利进入天气应用。
那么问题来了,想回到熟悉的iOS 9模式怎么办呢?其实也很简单,只要开启如下设置项:“ 设置——辅助功能——主屏幕按钮——轻触打开”,这样就能继续以iOS 9的方式轻触后直接进入主屏界面。
此外,对于升级了iOS 10的iPhone 5等没有Touch ID功能的设备,想呼出密码解锁该怎么办呢?有如下三种方式:
打开辅助功能中的AssistiveTouch(俗称小白点),点一下即可呼出;
向右滑动打开插件栏,点一下天气或其他插件即可出现密码输入界面;
通过左滑相机,然后查看所有照片呼出。
最后,对于搭载A9、A10芯片的设备(即在售的所有iPhone,包括iPhone SE、iPhone6s/Plus、iPhone7/Plus等),通过“ 设置——显示与亮度——抬起唤醒”设置项即可拿起手机快捷点亮屏幕(注意拿起iPhone的角度可能需要稍大一点)。
另外,如果配合上文提到的“轻触打开”功能,用户就可以实现拿起手机,然后轻触Home键进入主屏,全程都无需按压Home键。
相关阅读:
变砖问题已经解决,iOS 10迎来史上最重磅更新
iOS10凌晨发布,升级必备姿势你准备好了么
当我们在期待 iOS 10 的时候,到底是期待什么?
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
致力免费为玩家、消费者提供国内最值得入手的新奇酷玩产品
读懂智能与未来!
今日搜狐热点iOS指纹解锁和手势解锁
招聘信息:
前言一直想写博客来着,一来可以记录一些自己学习和研究的东西,二来也可以将自己写的一些东西分享出去,给他人参考,还可能收到他人的一些建议,从而完善自己的项目和提升自己的技术,这也是一种很好的技术交流方式。但是之前一直不知道怎么去写?怎么去总结?在经过一些观摩和学习后,终于决定先来试试水了。下面正式开始我的第一篇博客。这篇博客是自己基于iOS系统实现的指纹解锁(系统API)和手势解锁(CAShapeLayer)功能。在之前自学CAAnimation,再加上公司老大说可以预研(之前没有做过)一下各种解锁方式的情况下,想着自己来实现一下现在常用的解锁方式:指纹解锁和手势解锁。指纹解锁基于iOS的指纹解锁其实很简单,因为系统已经提供了API给你,你只需要做一些简单的判断和适时的调用就可以了。第一步首先导入头文件#import 判断是否开启了TouchID,如果已经开启,直接校验指纹,如果未开启,则需要先开启TouchID//判断是否开启了TouchID
[[[NSUserDefaults&standardUserDefaults]&objectForKey:@"OpenTouchID"]&boolValue]第二步未开启TouchID,询问是否开启-&(void)p_openTouchID
&&&&dispatch_async(dispatch_get_main_queue(),&^{
&&&&&&&&UIAlertController&*alertController&=&[UIAlertController&alertControllerWithTitle:@"温馨提示"&message:@"是否开启TouchID?"&preferredStyle:UIAlertControllerStyleAlert];
&&&&&&&&[alertController&addAction:[UIAlertAction&actionWithTitle:@"YES"&style:UIAlertActionStyleDefault&handler:^(UIAlertAction&*&_Nonnull&action)&{
&&&&&&&&&&&&//开启TouchID
&&&&&&&&&&&&[[NSUserDefaults&standardUserDefaults]&setObject:@(YES)&forKey:@"OpenTouchID"];
&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"OpenTouchIDSuccess"&object:nil&userInfo:nil];
&&&&&&&&}]];
&&&&&&&&[alertController&addAction:[UIAlertAction&actionWithTitle:@"NO"&style:UIAlertActionStyleCancel&handler:^(UIAlertAction&*&_Nonnull&action)&{
&&&&&&&&&&&&//不开启TouchID
&&&&&&&&&&&&[[NSUserDefaults&standardUserDefaults]&setObject:@(NO)&forKey:@"OpenTouchID"];
&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"OpenTouchIDSuccess"&object:nil&userInfo:nil];
&&&&&&&&}]];
&&&&&&&&[self&presentViewController:alertController&animated:YES&completion:nil];
}已开启TouchID-&(void)p_touchID
&&&&dispatch_async(dispatch_get_main_queue(),&^{
&&&&&&&&LAContext&*context&=&[[LAContext&alloc]&init];
&&&&&&&&NSError&*error&=&
&&&&&&&&//判断是否支持TouchID
&&&&&&&&if&([context&canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics&error:&error])&{
&&&&&&&&&&&&[context&evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics&localizedReason:@"TouchID&Text"&reply:^(BOOL&success,&NSError&*&_Nullable&error)&{
&&&&&&&&&&&&&&&&if&(success)&{//指纹验证成功
&&&&&&&&&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"UnlockLoginSuccess"&object:nil];
&&&&&&&&&&&&&&&&}else&{//指纹验证失败
&&&&&&&&&&&&&&&&&&&&switch&(error.code)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorAuthenticationFailed:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"授权失败");&//&-1&连续三次指纹识别错误
&&&&&&&&&&&&&&&&&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"touchIDFailed"&object:nil];
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorUserCancel:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"用户取消验证Touch&ID");&//&-2&在TouchID对话框中点击了取消按钮
&&&&&&&&&&&&&&&&&&&&&&&&&&&&[self&dismissViewControllerAnimated:YES&completion:nil];
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorUserFallback:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&[[NSOperationQueue&mainQueue]&addOperationWithBlock:^{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"touchIDFailed"&object:nil];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"用户选择输入密码,切换主线程处理");&//&-3&在TouchID对话框中点击了输入密码按钮
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorSystemCancel:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"取消授权,如其他应用切入,用户自主");&//&-4&TouchID对话框被系统取消,例如按下Home或者电源键
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorPasscodeNotSet:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"设备系统未设置密码");&//&-5
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorBiometryNotAvailable:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"设备未设置Touch&ID");&//&-6
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorBiometryNotEnrolled:&//&Authentication&could&not&start,&because&Touch&ID&has&no&enrolled&fingers
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"用户未录入指纹");&//&-7
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#if&__IPHONE_OS_VERSION_MAX_ALLOWED&>=&__IPHONE_9_0
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorBiometryLockout:&//Authentication&was&not&successful,&because&there&were&too&many&failed&Touch&ID&attempts&and&Touch&ID&is&now&locked.&Passcode&is&required&to&unlock&Touch&ID,&e.g.&evaluating&LAPolicyDeviceOwnerAuthenticationWithBiometrics&will&ask&for&passcode&as&a&prerequisite&用户连续多次进行Touch&ID验证失败,Touch&ID被锁,需要用户输入密码解锁,先Touch&ID验证密码
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"Touch&ID被锁,需要用户输入密码解锁");&//&-8&连续五次指纹识别错误,TouchID功能被锁定,下一次需要输入系统密码
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorAppCancel:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"用户不能控制情况下APP被挂起");&//&-9
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&case&LAErrorInvalidContext:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"LAContext传递给这个调用之前已经失效");&//&-10
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&[[NSOperationQueue&mainQueue]&addOperationWithBlock:^{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@"其他情况,切换主线程处理");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}];
&&&&&&&&}else&{
&&&&&&&&&&&&//不支持
&&&&&&&&&&&&UIAlertController&*alertController&=&[UIAlertController&alertControllerWithTitle:@"温馨提示"&message:@"该设备不支持TouchID"&preferredStyle:UIAlertControllerStyleAlert];
&&&&&&&&&&&&[alertController&addAction:[UIAlertAction&actionWithTitle:@"完成"&style:UIAlertActionStyleCancel&handler:nil]];
&&&&&&&&&&&&[self&presentViewController:alertController&animated:YES&completion:nil];
}注:代码中的NSNotificationCenter用于不同操作后的界面跳转,重新设置window.rootViewController,可忽略。到这里指纹解锁就结束了,很简单的一个API调用。手势解锁其实在之前还没有接触和刚开始接触iOS开发的时候,觉得手势解锁很难,完全不知道怎么去实现?但是当我在自学CAAnimation的时候,脑海中突然就想到了一个实现手势解锁的方案,下面就开始介绍我的实现方法:构思手势解锁是怎么去验证你滑动的手势是正确的?其实手势解锁和输入密码的验证是一样的,在你画UI的时候,你可以给每一个*圆点*一个id,在你设置手势的时候,将滑动到对应*圆点*的id放入一个有序集合中,并保存起来,然后验证登录的时候,用另外一个有序集合记录你当前滑动到的*圆点*id,然后和之前保存在本地的进行对比,就可以达到验证的目的了用什么方式去具体实现UI?在之前想过几种实现方式,但是都被pass掉了,直到自学CAAnimation的时候,才突然意识到有一个很好的实现方式----CAShapeLayer其实,当你有了这两个问题的答案的时候,你的手势解锁就已经实现了一大部分,后面的部分就是敲代码了。实现 (工程代码见文末链接)先上几张效果图:(由于本人艺术细胞有限,所以为了好看点,界面的UI是参照QQ安全中心的手势解锁)目录结构GesturesViewController:这个controller用于展示UI,你可以替换成自己controller,GesturesView:用于圆点按钮的初始化和布局,PointView:圆点手势按钮。这里主要介绍一下GesturesView和PointView,主要逻辑也都在这两个类中:PointView(主要是界面UI,不多介绍,直接上代码)PointView.h-&(instancetype)initWithFrame:(CGRect)frame
&&&&&&&&&&&&&&&&&&&&&&&withID:(NSString&*)ID;
@property&(nonatomic,&copy,&readonly)&NSString&&&&&&&&&&&&&*ID;
@property&(nonatomic,&assign)&BOOL&&&&&&&&&&&&&isS
//解锁失败
@property&(nonatomic,&assign)&BOOL&&&&&&&&&&&&&isE
//解锁成功
@property&(nonatomic,&assign)&BOOL&&&&&&&&&&&&&isS-initWithFrame:withID:传入frameheID,用于初始化PointView,ID:只读,用于外部获取ID,isSelected,isError,isSuccess:用于判断PointView的状态以显示不通的UI。PointView.m通过懒加载初始化三个CAShapeLayer#pragma&mark&-&懒加载
//外层手势按钮
-&(CAShapeLayer&*)contentLayer
&&&&if&(!_contentLayer)&{
&&&&&&&&_contentLayer&=&[CAShapeLayer&layer];
&&&&&&&&UIBezierPath&*path&=&[UIBezierPath&bezierPathWithRoundedRect:CGRectMake(2.0,&2.0,&SELF_WIDTH&-&4.0,&SELF_HEIGHT&-&4.0)&cornerRadius:(SELF_WIDTH&-&4.0)&/&2.0];
&&&&&&&&_contentLayer.path&=&path.CGP
&&&&&&&&_contentLayer.fillColor&=&RGBCOLOR(46.0,&47.0,&50.0).CGC
&&&&&&&&_contentLayer.strokeColor&=&RGBCOLOR(26.0,&27.0,&29.0).CGC
&&&&&&&&_contentLayer.strokeStart&=&0;
&&&&&&&&_contentLayer.strokeEnd&=&1;
&&&&&&&&_contentLayer.lineWidth&=&2;
&&&&&&&&_contentLayer.cornerRadius&=&self.bounds.size.width&/&2.0;
&&&&return&_contentL
//手势按钮边框
-&(CAShapeLayer&*)borderLayer
&&&&if&(!_borderLayer)&{
&&&&&&&&_borderLayer&=&[CAShapeLayer&layer];
&&&&&&&&UIBezierPath&*borderPath&=&[UIBezierPath&bezierPathWithArcCenter:CGPointMake(SELF_WIDTH&/&2.0,&SELF_HEIGHT&/&2.0)&radius:SELF_WIDTH&/&2.0&startAngle:0&endAngle:2&*&M_PI&clockwise:NO];
&&&&&&&&_borderLayer.strokeColor&=&RGBCOLOR(105.0,&108.0,&111.0).CGC
&&&&&&&&_borderLayer.fillColor&=&[UIColor&clearColor].CGC
&&&&&&&&_borderLayer.strokeEnd&=&1;
&&&&&&&&_borderLayer.strokeStart&=&0;
&&&&&&&&_borderLayer.lineWidth&=&2;
&&&&&&&&_borderLayer.path&=&borderPath.CGP
&&&&return&_borderL
//选中时,中间样式
-&(CAShapeLayer&*)centerLayer
&&&&if&(!_centerLayer)&{
&&&&&&&&_centerLayer&=&[CAShapeLayer&layer];
&&&&&&&&UIBezierPath&*centerPath&=&[UIBezierPath&bezierPathWithRoundedRect:CGRectMake(SELF_WIDTH&/&2.0&-&(SELF_WIDTH&-&4.0)&/&4.0,&SELF_HEIGHT&/&2.0&-&(SELF_HEIGHT&-&4.0)&/&4.0,&(SELF_WIDTH&-&4.0)&/&2.0,&(SELF_WIDTH&-&4.0)&/&2.0)&cornerRadius:(SELF_WIDTH&-&4.0)&/&4.0];
&&&&&&&&_centerLayer.path&=&centerPath.CGP
&&&&&&&&_centerLayer.lineWidth&=&3;
&&&&&&&&_centerLayer.strokeColor&=&[UIColor&colorWithWhite:0&alpha:0.7].CGC
&&&&&&&&_centerLayer.fillColor&=&RGBCOLOR(30.0,&180.0,&244.0).CGC
&&&&return&_centerL
}设置PointView的UI状态//根据情况显示三种状态
-&(void)setIsSuccess:(BOOL)isSuccess
&&&&_isSuccess&=&isS
&&&&if&(_isSuccess)&{
&&&&&&&&self.centerLayer.fillColor&=&RGBCOLOR(43.0,&210.0,&110.0).CGC
&&&&}else&{
&&&&&&&&self.centerLayer.fillColor&=&RGBCOLOR(30.0,&180.0,&244.0).CGC
-&(void)setIsSelected:(BOOL)isSelected
&&&&_isSelected&=&isS
&&&&if&(_isSelected)&{
&&&&&&&&self.centerLayer.hidden&=&NO;
&&&&&&&&self.borderLayer.strokeColor&=&RGBCOLOR(30.0,&180.0,&244.0).CGC
&&&&}else&{
&&&&&&&&self.centerLayer.hidden&=&YES;
&&&&&&&&self.borderLayer.strokeColor&=&RGBCOLOR(105.0,&108.0,&111.0).CGC
-&(void)setIsError:(BOOL)isError
&&&&_isError&=&isE
&&&&if&(_isError)&{
&&&&&&&&self.centerLayer.fillColor&=&RGBCOLOR(222.0,&64.0,&60.0).CGC
&&&&}else&{
&&&&&&&&self.centerLayer.fillColor&=&RGBCOLOR(30.0,&180.0,&244.0).CGC
}GesturesView(基本所有的逻辑都在这个里面了)GesturesView.h//回传选择的id
typedef&void&(^GestureBlock)(NSArray&*selectedID);
//回传手势验证结果
typedef&void&(^UnlockBlock)(BOOL&isSuccess);
//设置手势失败
typedef&void&(^SettingBlock)(void);
@interface&GesturesView&:&UIView
&设置密码时,返回设置的手势密码
@property&(nonatomic,&copy)&GestureBlock&&&&&&&&&&&&&gestureB
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&返回解锁成功还是失败状态
@property&(nonatomic,&copy)&UnlockBlock&&&&&&&&&&&&unlockB
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&判断手势密码时候设置成功(手势密码不得少于四个点)
@property&(nonatomic,&copy)&SettingBlock&&&&&&&&&&&settingB
&判断是设置手势还是手势解锁
@property&(nonatomic,&assign)&BOOL&&&&&&&&&settingG这里我申明了三个block:GestureBlock:将选择的ID有序集合回传给控制器,UnlockBlock:回传手势验证结果,SettingBlcok:设置手势失败属性:gestureBlock,unlockBlock,settingBlock:分别是对应block的实例,settingGesture:用于判断是设置手势还是手势解锁GesturesView.h (最主要的逻辑实现部分)私有属性部分://可变数组,用于存放初始化的点击按钮
@property&(nonatomic,&strong)&NSMutableArray&&&&&&&&&&&&&*pointV
//记录手势滑动的起始点
@property&(nonatomic,&assign)&CGPoint&&&&&&&&&&&&&&&&&&&&startP
//记录手势滑动的结束点
@property&(nonatomic,&assign)&CGPoint&&&&&&&&&&&&&&&&&&&&endP
//存储选中的按钮ID
@property&(nonatomic,&strong)&NSMutableArray&&&&&&&&&&&&&*selectedV
//手势滑动经过的点的连线
@property&(nonatomic,&strong)&CAShapeLayer&&&&&&&&&&&&&&&*lineL
//手势滑动的path
@property&(nonatomic,&strong)&UIBezierPath&&&&&&&&&&&&&&&*lineP
//用于存储选中的按钮
@property&(nonatomic,&strong)&NSMutableArray&&&&&&&&&&&&&*selectedViewC
//判断时候滑动是否结束
@property&(nonatomic,&assign)&BOOL&&&&&&&&&&&&&&&&&&&&&&&touchE代码实现部分:初始化startPoint,endPoint以及9个PointView按钮,startPoint和endPoint默认为0,并设置PointView的ID://初始化开始点位和结束点位
&&&&self.startPoint&=&CGPointZ
&&&&self.endPoint&=&CGPointZ
&&&&//布局手势按钮(采用自定义的全能初始化方法)
&&&&for&(int&i&=&0;&i<9&;&i++)&{
&&&&&&&&PointView&*pointView&=&[[PointView&alloc]&initWithFrame:CGRectMake((i&%&3)&*&(SELF_WIDTH&/&2.0&-&31.0)&+&1,&(i&/&3)&*&(SELF_HEIGHT&/&2.0&-&31.0)&+&1,&60,&60)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&withID:[NSString&stringWithFormat:@"gestures&%d",i&+&1]];
&&&&&&&&[self&addSubview:pointView];
&&&&&&&&[self.pointViews&addObject:pointView];
&&&&}滑动事件:开始滑动:如果self.touchEnd为YES则直接return,为NO开始以下处理:首先获取到滑动的点,遍历所有的PointView,判断该点是否在某个手势按钮范围,在范围内记录状态,否则不做处理;判断self.startPoint是否为CGPointZero,如果为YES,则将该手势按钮的center赋值给self.startP判断该手势按钮的center是否包含在self.selectedViewCenter中,如果为YES,忽略此次记录,为NO则记录该中心点,用于画线,同样记录该手势按钮的ID,用于记录保存手势密码;如果self.startPoint不为CGPointZero,则记录当前滑动到的点为self.endPoint,并划线。//touch事件
-&(void)touchesMoved:(NSSet&*)touches&withEvent:(UIEvent&*)event
&&&&if&(self.touchEnd)&{
&&&&UITouch&*touch&=&[touches&anyObject];
&&&&CGPoint&point&=&[touch&locationInView:self];
&&&&//判断手势滑动是否在手势按钮范围
&&&&for&(PointView&*pointView&in&self.pointViews)&{
&&&&&&&&//滑动到手势按钮范围,记录状态
&&&&&&&&if&(CGRectContainsPoint(pointView.frame,&point))&{
&&&&&&&&&&&&//如果开始按钮为zero,记录开始按钮,否则不需要记录开始按钮
&&&&&&&&&&&&if&(CGPointEqualToPoint(self.startPoint,&CGPointZero))&{
&&&&&&&&&&&&&&&&self.startPoint&=&pointView.
&&&&&&&&&&&&}
&&&&&&&&&&&&//判断该手势按钮的中心点是否记录,未记录则记录
&&&&&&&&&&&&if&(![self.selectedViewCenter&containsObject:[NSValue&valueWithCGPoint:pointView.center]])&{
&&&&&&&&&&&&&&&&[self.selectedViewCenter&addObject:[NSValue&valueWithCGPoint:pointView.center]];
&&&&&&&&&&&&}
&&&&&&&&&&&&//判断该手势按钮是否已经选中,未选中就选中
&&&&&&&&&&&&if&(![self.selectedView&containsObject:pointView.ID])&{
&&&&&&&&&&&&&&&&[self.selectedView&addObject:pointView.ID];
&&&&&&&&&&&&&&&&pointView.isSelected&=&YES;
&&&&&&&&&&&&}
&&&&//如果开始点位不为zero则记录结束点位,否则跳过不记录
&&&&if&(!CGPointEqualToPoint(self.startPoint,&CGPointZero))&{
&&&&&&&&self.endPoint&=&
&&&&&&&&[self&p_drawLines];
}画线:如果self.touchEnd为YES则直接return,为NO开始画线:首先移除self.lineLayer,self.linePath,否则你会发现随着你的滑动,会出现很多条线;设置self.linePath的起始点,并遍历self.selectedViewCenter,为self.linePath添加节点,最后将self.endPoint添加上去(为结束滑动的时候,self.endPoint为当前滑动位置的点);设置self.lineLayer的相应属性,并添加到self.layer。//画线
-&(void)p_drawLines
&&&&//结束手势滑动,不画线
&&&&if&(self.touchEnd)&{
&&&&//移除path的点和lineLayer
&&&&[self.lineLayer&removeFromSuperlayer];
&&&&[self.linePath&removeAllPoints];
&&&&//画线
&&&&[self.linePath&moveToPoint:self.startPoint];
&&&&for&(NSValue&*pointValue&in&self.selectedViewCenter)&{
&&&&&&&&[self.linePath&addLineToPoint:[pointValue&CGPointValue]];
&&&&[self.linePath&addLineToPoint:self.endPoint];
&&&&self.lineLayer.path&=&self.linePath.CGP
&&&&self.lineLayer.lineWidth&=&4.0;
&&&&self.lineLayer.strokeColor&=&RGBCOLOR(30.0,&180.0,&244.0).CGC
&&&&self.lineLayer.fillColor&=&[UIColor&clearColor].CGC
&&&&[self.layer&addSublayer:self.lineLayer];
&&&&self.layer.masksToBounds&=&YES;
}结束滑动:将self.endPoint设置为self.selectedViewCenter.lastObject,如果self.endPoint还是为CGPointZero,则说明未滑动到手势按钮范围,不做任何处理,否则继续以下逻辑处理;再次调用-(void)p_drawLines画线;判断是设置手势密码还是手势解锁;设置手势密码:如果选中的手势按钮数量少于4,设置self.touchEnd = NO使其可以重新设置,return结束此次设置;如果设置的手势按钮符合要求则调用self.gestureBlock(self.selectedView)将手势密码回传给控制器;手势解锁:获取本地存储的手势密码;我这里用的是NSUserDefaults,其实这是不安全的,建议使用Keychain,我也会在后续的更新中使用Keychain如果self.selectedView和本地手势密码一样,则解锁成功,并设置pointView.isSuccess = YES改变手势按钮样式等,并调用self.unlockBlock(YES),告知控制器结果;否则解锁失败,pointView.isError = YES改变手势按钮样式等,并调用self.unlockBlock(NO),告知控制器结果;-&(void)touchesEnded:(NSSet&*)touches&withEvent:(UIEvent&*)event
&&&&//结束手势滑动的时候,将结束按钮设置为最后一个手势按钮的中心点,并画线
&&&&self.endPoint&=&[self.selectedViewCenter.lastObject&CGPointValue];
&&&&//如果endPoint还是为zero说明未滑动到有效位置,不做处理
&&&&if&(CGPointEqualToPoint(self.endPoint,&CGPointZero))&{
&&&&[self&p_drawLines];
&&&&//改变手势滑动结束的状态,为yes则无法在滑动手势划线
&&&&self.touchEnd&=&YES;
&&&&//设置手势时,返回设置的时候密码,否则继续下面的操作进行手势解锁
&&&&if&(_gestureBlock&&&&_settingGesture)&{
&&&&&&&&//手势密码不得小于4个点
&&&&&&&&if&(self.selectedView.count&<&4)&{
&&&&&&&&&&&&self.touchEnd&=&NO;
&&&&&&&&&&&&for&(PointView&*pointView&in&self.pointViews)&{
&&&&&&&&&&&&&&&&pointView.isSelected&=&NO;
&&&&&&&&&&&&}
&&&&&&&&&&&&[self.lineLayer&removeFromSuperlayer];
&&&&&&&&&&&&[self.selectedView&removeAllObjects];
&&&&&&&&&&&&self.startPoint&=&CGPointZ
&&&&&&&&&&&&self.endPoint&=&CGPointZ
&&&&&&&&&&&&[self.selectedViewCenter&removeAllObjects];
&&&&&&&&&&&&if&(_settingBlock)&{
&&&&&&&&&&&&&&&&self.settingBlock();
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&_gestureBlock(self.selectedView);
&&&&//手势解锁
&&&&NSArray&*selectedID&=&[[NSUserDefaults&standardUserDefaults]&objectForKey:@"GestureUnlock"];
&&&&//解锁成功
&&&&if&([self.selectedView&isEqualToArray:selectedID])&{
&&&&&&&&//解锁成功,遍历pointview,设置为成功状态
&&&&&&&&for&(PointView&*pointView&in&self.pointViews)&{
&&&&&&&&&&&&pointView.isSuccess&=&YES;
&&&&&&&&self.lineLayer.strokeColor&=&RGBCOLOR(43.0,&210.0,&110.0).CGC
&&&&&&&&if&(_unlockBlock)&{
&&&&&&&&&&&&self.unlockBlock(YES);
&&&&&&&&dispatch_after(dispatch_time(DISPATCH_TIME_NOW,&(int64_t)(1.5&*&NSEC_PER_SEC)),&dispatch_get_main_queue(),&^{
&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"UnlockLoginSuccess"&object:nil];
&&&&&&&&});
&&&&}else&{//解锁失败
&&&&&&&&//解锁失败,遍历pointView,设置为失败状态
&&&&&&&&for&(PointView&*pointView&in&self.pointViews)&{
&&&&&&&&&&&&pointView.isError&=&YES;
&&&&&&&&self.lineLayer.strokeColor&=&RGBCOLOR(222.0,&64.0,&60.0).CGC
&&&&&&&&if&(_unlockBlock)&{
&&&&&&&&&&&&self.unlockBlock(NO);
}到这里就实现了手势解锁的所有逻辑,在实现之前还在担心有什么问题,结果实现出来之后感觉其实很简单。最后希望这篇文章能够帮助到一些人。对于代码和博客的一些规范希望大家谅解一下了,后面也会慢慢去优化的。最后的最后附上Demo的链接 。作者:yzx29链接:https://juejin.im/post/5aa8defb6fb9a028ca52abdc
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
<img src="http://cc.cocimg.com/api/uploads/914d0bb3e2e225a2c.png"
style="max-height:60px" alt="2018-iOS面试题"/>2018-iOS面试题点击量6462点击量5835点击量4563点击量2882点击量2736点击量2572点击量2571点击量2449点击量2336
&2018 Chukong Technologies,Inc.
京公网安备89}

我要回帖

更多关于 ios11锁屏方式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信