您的位置:首页 > 其它

3DTouch 开发过程记录,按功能模块记录

2016-03-21 17:57 573 查看

3DTouch 开发过程记录,按功能模块记录



1..添加 Home Screen Quick Actions 的两种方式

解释:


1. Home Screen Quick Actions 就是通过按压应用图标出现的快捷启动菜单,可以添加添加标题,副标题,还有效果图片(系统UIApplicationShortcutIconType枚举中已经预制了好多图片).

2. 快捷菜单允许的最多显示的项目为 4个.

3. 两种创建方式可以共存,但是先加载info 然后才是代码添加的item.

4. icon的位置,如图的icon就在右边.通过拖动图标,可以看出这个现象是根据APP位置居左居右,icon一直靠屏幕边框的方向



快捷菜单关键字说明:

keyDescriptionrequired
UIApplicationShortcutItemType事件的唯一标识,可以通过这个标识来辨别你具体点击了哪个事件Y
UIApplicationShortcutItemTitle标题,在没有子标题的情况下如果标题太长能自动换行Y
UIApplicationShortcutItemSubtitle子标题,在标题的下方N
UIApplicationShortcutItemIconType枚举选取系统中的一个图标类型N
UIApplicationShortcutItemIconFile自定义一个图标,以单一颜色35x35的大小展示,如果设置这个,UIApplicationShortcutItemIconType将不起作用N
UIApplicationShortcutItemUserInfo字典,里面可以添加各种key、value对N

1..静态info.plist方法添加

这种方式就是通过预先设置info.plist文件内容,添加启动方式.


<array>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.mycompany.myapp.openfavorites</string>
<key>UIApplicationShortcutItemIconFile</key>
<string>open-favorites</string>
<key>UIApplicationShortcutItemTitle</key>
<string>第一个Item</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key1</key>
<string>value1</string>
</dict>
<key>UIApplicationShortcutItemSubtitle</key>
<string>啦啦啦啦啦啦啦啦啦啦啦啦</string>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.mycompany.myapp.newmessage</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeCompose</string>
<key>UIApplicationShortcutItemTitle</key>
<string>New Message</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key2</key>
<string>value2</string>
</dict>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.mycompany.myapp.newmessage</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeCompose</string>
<key>UIApplicationShortcutItemTitle</key>
<string>3</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key2</key>
<string>value2</string>
</dict>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.mycompany.myapp.newmessage</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeCompose</string>
<key>UIApplicationShortcutItemTitle</key>
<string>4</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key2</key>
<string>value2</string>
</dict>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.mycompany.myapp.newmessage</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeCompose</string>
<key>UIApplicationShortcutItemTitle</key>
<string>4</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key2</key>
<string>value2</string>
</dict>
</dict>
</array>




2..动态方法,通过代码创建 UIApplicationShortCutItem实例,添加到UIApplication的shortcutItem中

通过以下代码,动态设定快捷菜单:

UIApplicationShortcutIcon *shortIcon =[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeUpdate];
UIApplicationShortcutItem * shortItem =[[UIApplicationShortcutItem alloc] initWithType:@"One" localizedTitle:@"Me is few " localizedSubtitle:nil icon:shortIcon userInfo:nil];

[UIApplication sharedApplication].shortcutItems = @[shortItem];


通过 “Home QA” 启动APP , API中提供了下面这个方法,其中
shortcutItem
中包含了我们启动的一些信息,type,userInfo 等,可以通过这些判断来决定我们要做什么操作.

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;


关于
completionHandler
解释(目前我还没有太透彻的理解):

Call this block after your quick action implementation completes,

returning YES or NO depending on the success or failure of your implementation code.


2.. Peek && Pop && Peek quick actions

关于 Peek:

这个功能需要在ViewController中来实现.首先,当前要实现PeekView的A-VC要遵从
<UIViewControllerPreviewingDelegate>
协议,下面说代码部分,首先要判断一下当前设备是否开启了3DTouch(因为用户可以在”设置”中关闭),如果3DTouch开启了,就注册一下实现代理的VC和响应的View:

判断当前设备是否开启3DTouch:

forceTouchCapability 是个枚举类型,可以CMD点击进去看一下.

if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
NSLog(@"Available");

[self registerForPreviewingWithDelegate:self sourceView:btn];

}


上面这是我们主动判断,也有一种情况就是,APP启动了,然后进入设置将3DTouch关闭了,我们将通过这个方法进行判断:

To be overridden as needed to provide custom behavior when the environment’s traits change.The UITraitCollection object before the interface environment changed.

-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityUnavailable)
{
NSLog(@"Available");

[self registerForPreviewingWithDelegate:self sourceView:btn];

}
}


Peek:



A-VC 中要实现这两个代理:

按压进入 “Peek”:

- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0);


-(UIViewController*)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
if ([self.presentedViewController isKindOfClass:[ViewController class]]) {
return nil;
}

ViewController * view =[[ViewController alloc]init];
view.view.frame =self.view.frame;

UIImageView *imagev =[[UIImageView  alloc] initWithImage:[UIImage imageNamed:@"0.png"]];

view.view =imagev;

return view;
}


持续用力按压 “进入页面B-VC”

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0);


-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
[self showViewController:viewControllerToCommit sender:self];
}


Peek Quick:



UIViewControllerPreviewingDelegate
中还有一个方法,B-VC要遵循这个协议,而且B-VC中要实现
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
,

实现了这个方法,在A-VC中在此按压出现PeekView就出现了快捷菜单了.通过这个方法返回

这个快捷菜单的数据,可以是一个二维数组,比如:@[@[],@[]],如下:

-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
// 生成UIPreviewAction
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 1 selected");
}];

UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Action 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 2 selected");
}];

UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Action 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 3 selected");
}];

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

UIPreviewAction *tap2 = [UIPreviewAction actionWithTitle:@"tap 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"tap 2 selected");
}];

UIPreviewAction *tap3 = [UIPreviewAction actionWithTitle:@"tap 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"tap 3 selected");
}];

UIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:@[action1, action2, action3]];
UIPreviewActionGroup *group2 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:@[tap1, tap2, tap3]];

return @[group1,group2];;
}


参考文档:

<<官方API文档>>

<<浅谈3D Touch(1) – Home screen quick action>>

<<浅谈3D Touch(2) – UITouch && Peek && Pop>>

<<【文档】在iPhone上使用3D Touch>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: