iOS 3D Touch 开发 实战

来源:互联网 发布:java太难了 编辑:程序博客网 时间:2024/05/22 11:58
1、3D Touch主要功能
1.A user can now press your Home screen icon to immediately access functionality provided by your app.2.Within your app, a user can now press views to see previews of additional content and gain accelerated access to features.

       第一部分的应用是我们可以通过3D手势,在主屏幕上的应用Icon处,直接进入应用的响应功能模块。这个功能就例如我们上面的日历示例,会在Icon旁边出现一个菜单,点击菜单我们可以进入相应的功能单元。我个人理解,这个功能,push消息功能加上iOS8推出的扩展today功能,这三个机制使iOS应用变得无比灵活方便,用户可以不需付出寻找的时间成本来快速使用自己需要的功能。

       第二部分是对app的一个优化,用户可以通过3D Touch手势在view上来预览一些预加载信息,这样的设计可以使app更加简洁大方,交互性也更强。


2、3D Touch 的模块

      在我们的app中使用3D Touch功能,主要分为以下三个模块:

1、Home Screen Quick Actions

      通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。如上面的日历。

2、peek and pop

     这个功能是一套全新的用户交互机制,在使用3D Touch时,ViewController中会有如下三个交互阶段:

     1)提示用户这里有3D Touch的交互,会使交互控件周围模糊

                   


         2)继续深按,会出现预览视图
                

     

         3)通过视图上的交互控件进行进一步交互
                           

                这个模块的设计可以在网址连接上进行网页的预览交互。

3.Force Properties

       iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以
 通过力度来控制快进的快慢,音量增加的快慢等。

                           

                  必填项(下面两个键值是必须设置的):

                     UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串

                     UIApplicationShortcutItemTitle 这个键值设置标签的标题

            选填项(下面这些键值不是必须设置的):

                    UIApplicationShortcutItemSubtitle 设置标签的副标题

                    UIApplicationShortcutItemIconType 设置标签Icon类型

                    UIApplicationShortcutItemIconFile  设置标签的Icon文件

           ② 动态在 appdelegate 中实现

                    动态标签是我们在程序中,通过代码添加的,与之相关的类,主要有三个:

                    UIApplicationShortcutItem 创建3DTouch标签的类

                    UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类

                    UIApplicationShortcutIcon 创建标签中图片Icon的类

   因为这些类是iOS9中新增加的类,所以其api的复杂程度并不大,下面我们来对其中方法与属性进行简要讲解:

<span style="font-size:18px;">@interface UIApplicationShortcutItem : NSObject //下面是两个初始化方法 通过设置type,title等属性来创建一个标签,这里的icon是UIApplicationShortcutIcon对象,我们后面再说- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER;- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;//下面这是一些只读的属性,获取相应的属性值@property (nonatomic, copy, readonly) NSString *type;@property (nonatomic, copy, readonly) NSString *localizedTitle;@property (nullable, nonatomic, copy, readonly) NSString *localizedSubtitle;@property (nullable, nonatomic, copy, readonly) UIApplicationShortcutIcon *icon;@property (nullable, nonatomic, copy, readonly) NSDictionary> *userInfo;//这个类继承于 UIApplicationShortcutItem,创建的标签可变@interface UIMutableApplicationShortcutItem : UIApplicationShortcutItem@property (nonatomic, copy) NSString *type;@property (nonatomic, copy) NSString *localizedTitle;@property (nullable, nonatomic, copy) NSString *localizedSubtitle;@property (nullable, nonatomic, copy) UIApplicationShortcutIcon *icon;@property (nullable, nonatomic, copy) NSDictionary> *userInfo;@end</span>

//这个类创建标签中的icon@interface UIApplicationShortcutIcon : NSObject //创建系统风格的icon+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;//创建自定义的图片icon+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;@end


创建好标签后,将其添加如application的hortcutItems数组中即可,示例如下:

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//创建UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"two"localizedTitle:@"第二个标签"localizedSubtitle:@"看我哦"icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];//添加[UIApplication sharedApplication].shortcutItems = @[item];}
也可以在appdelegate 中写
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon1"];UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon2"];UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon3"];// create several (dynamic) shortcut itemsUIMutableApplicationShortcutItem*item1 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"com.test.dynamic" localizedTitle:@"DynamicShortcut" localizedSubtitle:@"available after first launch" icon:icon1userInfo:nil];UIMutableApplicationShortcutItem*item2 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"com.test.deep1" localizedTitle:@"Deep Link 1"localizedSubtitle:@"Launch Nav Controller" icon:icon2 userInfo:nil];UIMutableApplicationShortcutItem*item3 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"com.test.deep2" localizedTitle:@"Deep Link 2"localizedSubtitle:@"Launch 2nd Level" icon:icon3 userInfo:nil];// add all items to an arrayNSArray *items = @[item1, item2, item3];// add this array to the potentially existing static UIApplicationShortcutItemsNSArray *existingItems = [UIApplication sharedApplication].shortcutItems;NSArray *updatedItems = [existingItems arrayByAddingObjectsFromArray:items];[UIApplication sharedApplication].shortcutItems = updatedItems;- (void)application:(UIApplication *)applicationperformActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItemcompletionHandler:(void (^)(BOOL))completionHandler

在控制器中pop peek

首先控制器该继承UIViewControllerPreviewingDelegate应该判断该控制器当前是否实现了3dtouch手势 如果实现的话最好禁用长按手势 (如果你的添加了该手势的话)


if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {[self registerForPreviewingWithDelegate:(id)self sourceView:self.view];NSLog(@"3D Touch is available! Hurra!");// no need for our alternative anymoreself.longPress.enabled = NO;} else {NSLog(@"3D Touch is not available on this device. Sniff!");// handle a 3D Touch alternative (long gesture recognizer)self.longPress.enabled = YES;}

点击进入预览模式: 实现该协议方法
- (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location

继续按压进入:实现该协议
- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit

预览模式上拉实现 :

我们预览模式下上拉 出现一个视图  该视图类 apple提供了 UIPreviewAction 该类来实现,调用

UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"Action 1 triggered");}];

回调中实现你要操作的行为

这个方法在 - (NSArray> *)previewActionItems  中返回action 的数组




















                      


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邻居早上6点放音乐扰民怎么办 隔壁楼邻居天天放音乐很吵怎么办 发现老公在卧室安了摄像头怎么办 憋的尿又没有厕所的时候怎么办 一岁宝宝拉屎总是拉出血怎么办 孩子鼻窦炎鼻子堵有白色鼻涕怎么办 家里阳台上老是有蝙蝠趴着怎么办 空调太冷在空调房里该怎么办 分手了怎么办不要挽回要重新吸引 过敏体质没打疫苗的孩子入学怎么办 遇到不认识的小姐姐问我问题怎么办 小孩孑脖子洛忱了痛怎么办 挤奶把乳腺挤肿了不出奶怎么办 遇到好兄弟在背后捅刀子怎么办 面对出轨还不想离婚的老公怎么办 法院执行局把案划错了不承认怎么办 手机nfc功能被手机壳挡住怎么办 飞信短信登录验证码达到上限怎么办 手机自带短信软件没了怎么办 老婆出轨孩子又3个不知道怎么办 骑电动车摔跤小脚趾疼有点肿怎么办 第一次太疼了有心理阴影了怎么办 天梭机械表调了时间忽然慢怎么办 支付宝信用住到酒店没房间怎么办 拳头打在硬上骨头肿了怎么办 领导决策出现了失误你该怎么办 我的直销团队走到瓶颈了怎么办 孕妇8个月便秘大便带血怎么办 爱他美金装冲泡有泡沫怎么办 做雅思听力时理解不了原文怎么办 英国读语言班不想读研了怎么办 英国读研本科学位不够分怎么办 英国华威大学读研没分到宿舍怎么办 英国留学申请大学成绩没通过怎么办 很想上专升本但是专科挂科怎么办 英国学校申请的gpa太低了怎么办 博士面试通过后导师不签名怎么办 资助出国留学协议书写错了怎么办 人生最低谷运气最差的时候怎么办 孩子出国留学一年后想回国怎么办 领导给我娃的钱我怎么办