发布时间:2025-12-11 03:04:27 浏览次数:1
1.前言
随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来。
2.如何使用3D Touch?
2.1.主界面重按APP图标,弹出Touch菜单
在AppleDelegate文件中的程序入口处配置:
didFinishLaunchingWithOptions
//给App图标添加3DTouch菜单//拍照//菜单图标UIApplicationShortcutIcon*iconCamera=[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeAdd];//菜单文字UIMutableApplicationShortcutItem*itemCamera=[[UIMutableApplicationShortcutItemalloc]initWithType:@"1"localizedTitle:@"拍照"];//绑定信息到指定菜单itemCamera.icon=iconCamera;//相册//菜单图标UIApplicationShortcutIcon*iconPhotoLibrary=[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeSearch];//菜单文字UIMutableApplicationShortcutItem*itemPhotoLibrary=[[UIMutableApplicationShortcutItemalloc]initWithType:@"2"localizedTitle:@"相册"];//绑定信息到指定菜单itemPhotoLibrary.icon=iconPhotoLibrary;//绑定到Appiconapplication.shortcutItems=@[itemCamera,itemPhotoLibrary];
弹出菜单,我们需要让用户点击后跳转指定页面
这里我们会用到AppDelegate里新增加的一个方法
-(void)application:(UIApplication*)applicationperformActionForShortcutItem:(nonnullUIApplicationShortcutItem*)shortcutItemcompletionHandler:(nonnullvoid(^)(BOOL))completionHandler;
让后我们需要在这个方法里做跳转的操作
//照相typeif([shortcutItem.typeisEqualToString:@"1"]){UIImagePickerController*picker=[[UIImagePickerControlleralloc]init];//初始化picker.allowsEditing=YES;//设置可编辑picker.sourceType=UIImagePickerControllerSourceTypeCamera;[self.window.rootViewControllerpresentViewController:pickeranimated:YEScompletion:nil];//进入照相界面}//相册typeif([shortcutItem.typeisEqualToString:@"2"]){UIImagePickerController*picker=[[UIImagePickerControlleralloc]init];//初始化picker.allowsEditing=YES;//设置可编辑picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;[self.window.rootViewControllerpresentViewController:pickeranimated:YEScompletion:nil];//进入图片库点击后分别会进入相机和相册
2.2. 3DTouch轻按预览功能,预览时底部菜单的添加
首先我们要把轻按预览和长按手势区分开来,这里要在初始化时做一个基本的检测。
nterfaceViewController()<UIViewControllerPreviewingDelegate>{UILongPressGestureRecognizer*_longPress;}@end@implementationViewController-(void)viewDidLoad{[superviewDidLoad];UILongPressGestureRecognizer*longPressGr=[[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPressToDo)];_longPress=longPressGr;}//检测页面是否处于3DTouch-(void)check3DTouch{if(self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable){[selfregisterForPreviewingWithDelegate:selfsourceView:self.view];NSLog(@"3DTouch开启");//长按停止_longPress.enabled=NO;}else{_longPress.enabled=YES;}}-(void)viewWillAppear:(BOOL)animated{[selfcheck3DTouch];}然后我们需要实现 UIViewControllerPreviewingDelegate的协议
@interfaceViewController()<UIViewControllerPreviewingDelegate>
//然后实现代理方法-(UIViewController*)previewingContext:(id<UIViewControllerPreviewing>)previewingContextviewControllerForLocation:(CGPoint)location;#pragmamark>>3Dtouch代理方法//轻按进入浮动预览页面-(UIViewController*)previewingContext:(id<UIViewControllerPreviewing>)previewingContextviewControllerForLocation:(CGPoint)location{//注意这里我因为测试,没做具体的位置处理,如果需要定位到具体的图片Cell位置的话,可以用location通过tableView的convertPoint来取到指定CellASPreviewViewController*vc=[[ASPreviewViewControlleralloc]init];vc.view.frame=self.view.frame;UIImageView*er=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"123.png"]];vc.view=er;returnvc;}完成后可以实现基本的预览效果:
最后我们加上一个
预览时下滑底部菜单的添加
在我们刚刚创建的预览控制器ASPreviewViewController里实现 UIViewControllerPreviewingDelegate的协议
然后重写它的代理方法
-(NSArray<id<UIPreviewActionItem>>*)previewActionItems;//预览页面底部ActionItems-(NSArray<id<UIPreviewActionItem>>*)previewActionItems{UIPreviewAction*p1=[UIPreviewActionactionWithTitle:@"分享"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController){NSLog(@"点击了分享");}];UIPreviewAction*p2=[UIPreviewActionactionWithTitle:@"收藏"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController){NSLog(@"点击了收藏");}];NSArray*actions=@[p1,p2];returnactions;}感谢你能够认真阅读完这篇文章,希望小编分享的“iOS怎么使用3D Touch”这篇文章对大家有帮助,同时也希望大家多多支持本站,关注本站行业资讯频道,更多相关知识等着你来学习!