1.前言
随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助。2.如何使用3D Touch?
2.1.主界面重按APP图标,弹出Touch菜单
在AppleDelegate
文件中的程序入口处配置:
didFinishLaunchingWithOptions
01.
//给App图标添加3D Touch菜单
02.
//拍照
03.
04.
//菜单图标
05.
UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
06.
//菜单文字
07.
UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@
'1'
localizedTitle:@
'拍照'
];
08.
//绑定信息到指定菜单
09.
itemCamera.icon = iconCamera;
10.
11.
//相册
12.
//菜单图标
13.
UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
14.
//菜单文字
15.
UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@
'2'
localizedTitle:@
'相册'
];
16.
//绑定信息到指定菜单
17.
itemPhotoLibrary.icon = iconPhotoLibrary;
18.
//绑定到App icon
19.
application.shortcutItems = @[itemCamera,itemPhotoLibrary];
弹出菜单,我们需要让用户点击后跳转指定页面
这里我们会用到AppDelegate里新增加的一个方法
1.
- (
void
)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull
void
(^)(BOOL))completionHandler;
让后我们需要在这个方法里做跳转的操作
01.
//照相type
02.
if
([shortcutItem.type isEqualToString:@
'1'
]) {
03.
04.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
//初始化
05.
picker.allowsEditing = YES;
//设置可编辑
06.
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
07.
[self.window.rootViewController presentViewController:picker animated:YES completion:nil];
//进入照相界面
08.
09.
}
10.
//相册type
11.
if
([shortcutItem.type isEqualToString:@
'2'
]) {
12.
13.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
//初始化
14.
picker.allowsEditing = YES;
//设置可编辑
15.
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
16.
[self.window.rootViewController presentViewController:picker animated:YES completion:nil];
//进入图片库
点击后分别会进入相机和相册
2.2. 3DTouch轻按预览功能,预览时底部菜单的添加
首先我们要把轻按预览和长按手势区分开来,这里要在初始化时做一个基本的检测。01.
nterface ViewController () <UIViewControllerPreviewingDelegate>
02.
{
03.
UILongPressGestureRecognizer *_longPress;
04.
}
05.
@end
06.
07.
08.
@implementation ViewController
09.
10.
- (
void
)viewDidLoad {
11.
[super viewDidLoad];
12.
UILongPressGestureRecognizer *longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo)];
13.
_longPress = longPressGr;
14.
}
15.
16.
17.
//检测页面是否处于3DTouch
18.
- (
void
)check3DTouch{
19.
20.
if
(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
21.
22.
[self registerForPreviewingWithDelegate:self sourceView:self.view];
23.
NSLog(@
'3D Touch 开启'
);
24.
//长按停止
25.
_longPress.enabled = NO;
26.
27.
}
else
{
28.
_longPress.enabled = YES;
29.
}
30.
31.
}
32.
33.
34.
- (
void
)viewWillAppear:(BOOL)animated{
35.
36.
[self check3DTouch];
37.
38.
}
然后我们需要实现 UIViewControllerPreviewingDelegate的协议
1.
@
interface
ViewController () <UIViewControllerPreviewingDelegate>
1.
//然后实现代理方法
2.
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;
01.
#pragma mark >> 3D touch 代理方法
02.
//轻按进入浮动预览页面
03.
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
04.
05.
//注意这里我因为测试,没做具体的位置处理,如果需要定位到具体的图片Cell位置的话,可以用location通过tableView的convertPoint来取到指定Cell
06.
07.
<a href=
"http://www.it165.net/pro/webasp/"
target=
"_blank"
class
=
"keylink"
>ASP</a>reviewViewController *vc = [[<a href=
"http://www.it165.net/pro/webasp/"
target=
"_blank"
class
=
"keylink"
>ASP</a>reviewViewController alloc] init];
08.
vc.view.frame = self.view.frame;
09.
UIImageView *er = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@
'123.png'
]];
10.
vc.view = er;
11.
return
vc;
12.
13.
}
完成后可以实现基本的预览效果:
最后我们加上一个
预览时下滑底部菜单的添加
在我们刚刚创建的预览控制器ASPreviewViewController里实现 UIViewControllerPreviewingDelegate的协议
然后重写它的代理方法
1.
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems;
01.
//预览页面 底部Action Items
02.
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
03.
04.
UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:@
'分享'
style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
05.
NSLog(@
'点击了分享'
);
06.
}];
07.
08.
UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@
'收藏'
style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
09.
NSLog(@
'点击了收藏'
);
10.
}];
11.
12.
NSArray *actions = @[p1,p2];
13.
return
actions;
14.
}