当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS 指压即达集成iOS9里的3D Touch的方法

iOS 指压即达集成iOS9里的3D Touch的方法

2019年07月24日  | 移动技术网移动技术  | 我要评论

1.前言  

随着6s的到来,3dtouch被各大热门app迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助。

2.如何使用3d touch?  

2.1.主界面重按app图标,弹出touch菜单  

在appledelegate文件中的程序入口处配置:

didfinishlaunchingwithoptions

//给app图标添加3d touch菜单
//拍照
//菜单图标
uiapplicationshortcuticon *iconcamera = [uiapplicationshortcuticon iconwithtype:uiapplicationshortcuticontypeadd];
//菜单文字
uimutableapplicationshortcutitem *itemcamera = [[uimutableapplicationshortcutitem alloc] initwithtype:@"1" localizedtitle:@"拍照"];
//绑定信息到指定菜单
itemcamera.icon = iconcamera;
//相册
//菜单图标
uiapplicationshortcuticon *iconphotolibrary = [uiapplicationshortcuticon iconwithtype:uiapplicationshortcuticontypesearch];
//菜单文字
uimutableapplicationshortcutitem *itemphotolibrary = [[uimutableapplicationshortcutitem alloc] initwithtype:@"2" localizedtitle:@"相册"];
//绑定信息到指定菜单
itemphotolibrary.icon = iconphotolibrary;
//绑定到app icon
application.shortcutitems = @[itemcamera,itemphotolibrary];

 弹出菜单,我们需要让用户点击后跳转指定页面

这里我们会用到appdelegate里新增加的一个方法

- (void)application:(uiapplication *)application performactionforshortcutitem:(nonnull uiapplicationshortcutitem *)shortcutitem completionhandler:(nonnull void (^)(bool))completionhandler; 

 让后我们需要在这个方法里做跳转的操作

//照相type
if ([shortcutitem.type isequaltostring:@"1"]) {
 
 uiimagepickercontroller *picker = [[uiimagepickercontroller alloc] init];//初始化
 picker.allowsediting = yes;//设置可编辑
 picker.sourcetype = uiimagepickercontrollersourcetypecamera;
 [self.window.rootviewcontroller presentviewcontroller:picker animated:yes completion:nil];//进入照相界面
 
}
//相册type
if ([shortcutitem.type isequaltostring:@"2"]) {
 uiimagepickercontroller *picker = [[uiimagepickercontroller alloc] init];//初始化
 picker.allowsediting = yes;//设置可编辑
 picker.sourcetype = uiimagepickercontrollersourcetypephotolibrary;
 [self.window.rootviewcontroller presentviewcontroller:picker animated:yes completion:nil];//进入图片库

 点击后分别会进入相机和相册

2.2. 3dtouch轻按预览功能,预览时底部菜单的添加  

首先我们要把轻按预览和长按手势区分开来,这里要在初始化时做一个基本的检测。

nterface viewcontroller () <uiviewcontrollerpreviewingdelegate>
{
 uilongpressgesturerecognizer *_longpress;
}
@end
@implementation viewcontroller
- (void)viewdidload {
 [super viewdidload];
 uilongpressgesturerecognizer *longpressgr = [[uilongpressgesturerecognizer alloc] initwithtarget:self action:@selector(longpresstodo)];
 _longpress = longpressgr;
}
//检测页面是否处于3dtouch
- (void)check3dtouch{
 if (self.traitcollection.forcetouchcapability == uiforcetouchcapabilityavailable) {
  [self registerforpreviewingwithdelegate:self sourceview:self.view];
  nslog(@"3d touch 开启");
  //长按停止
  _longpress.enabled = no;
 }else{
  _longpress.enabled = yes;
 }
}
- (void)viewwillappear:(bool)animated{
 [self check3dtouch];
}

然后我们需要实现 uiviewcontrollerpreviewingdelegate的协议

@interface viewcontroller () <uiviewcontrollerpreviewingdelegate>
//然后实现代理方法
- (uiviewcontroller *)previewingcontext:(id<uiviewcontrollerpreviewing>)previewingcontext viewcontrollerforlocation:(cgpoint)location;
#pragma mark >> 3d touch 代理方法
//轻按进入浮动预览页面
- (uiviewcontroller *)previewingcontext:(id<uiviewcontrollerpreviewing>)previewingcontext viewcontrollerforlocation:(cgpoint)location{
 //注意这里我因为测试,没做具体的位置处理,如果需要定位到具体的图片cell位置的话,可以用location通过tableview的convertpoint来取到指定cell
 aspreviewviewcontroller *vc = [[aspreviewviewcontroller alloc] init];
 vc.view.frame = self.view.frame;
 uiimageview *er = [[uiimageview alloc] initwithimage:[uiimage imagenamed:@"123.png"]];
 vc.view = er;
 return vc;
}

完成后可以实现基本的预览效果:

最后我们加上一个

预览时下滑底部菜单的添加

在我们刚刚创建的预览控制器aspreviewviewcontroller里实现 uiviewcontrollerpreviewingdelegate的协议

然后重写它的代理方法

- (nsarray<id<uipreviewactionitem>> *)previewactionitems;
 
//预览页面 底部action items
- (nsarray<id<uipreviewactionitem>> *)previewactionitems{
 uipreviewaction *p1 =[uipreviewaction actionwithtitle:@"分享" style:uipreviewactionstyledefault handler:^(uipreviewaction * _nonnull action, uiviewcontroller * _nonnull previewviewcontroller) {
  nslog(@"点击了分享");
 }];
 uipreviewaction *p2 =[uipreviewaction actionwithtitle:@"收藏" style:uipreviewactionstyledefault handler:^(uipreviewaction * _nonnull action, uiviewcontroller * _nonnull previewviewcontroller) {
  nslog(@"点击了收藏");
 }];
 nsarray *actions = @[p1,p2];
 return actions;
}

以上所述是小编给大家介绍的ios 指压即达集成ios9里的3d touch的方法,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网