iOS开发3DTouch功能的实现

开发环境及调试设备支持:

Xcode7或以上,iOS9或以上,iPhone6s或以上

3DTouch功能主要分为两部分:

1、主屏幕icon上的快捷标签(Home Screen Quick Actions)

主屏幕icon上的快捷标签的实现方式有两种,

1.1在工程文件info.plist里静态设置

静态设置(在info.plist)中添加如下字段:


iOS开发3DTouch功能的实现_第1张图片
静态添加.png

效果如下:


iOS开发3DTouch功能的实现_第2张图片
静态添加效果.png

1.2代码的动态实现。

动态添加需要Application在iOS9之后新增的一个属性:

@property (nullable, nonatomic, copy) NSArray*shortcutItems NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

然后在项目中添加代码:


iOS开发3DTouch功能的实现_第3张图片
动态添加代码.png


iOS开发3DTouch功能的实现_第4张图片
动态添加效果.png

下面列举一下UIApplicationShortcutItem每个参数的含义:

iOS开发3DTouch功能的实现_第5张图片
UIApplicationShortcutItem.png

2、Peek and Pop

1、注册(在哪个页面上使用该功能就注册在哪个页面上)

[self registerForPreviewingWithDelegate:selfsourceView:cell];

2、继承协议UIViewControllerPreviewingDelegate

3、实现UIViewControllerPreviewingDelegate方法


//peek(预览)- (nullable UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location

{

//获取按压的cell所在行,[previewingContext sourceView]就是按压的那个视图

NSIndexPath *indexPath = [_myTableView indexPathForCell:(UITableViewCell* )[previewingContext sourceView]];

//设定预览的界面

MyPreviewingViewController *childVC = [[MyPreviewingViewController alloc] init];

childVC.preferredContentSize = CGSizeMake(0.0f,500.0f);

childVC.myStr = [NSString stringWithFormat:@"我是%@,用力按一下进来-------",_myArray[indexPath.row]];

//调整不被虚化的范围,按压的那个cell不被虚化(轻轻按压时周边会被虚化,再少用力展示预览,再加力跳页至设定界面)

CGRect rect = CGRectMake(0, 0, self.view.frame.size.width,40);

previewingContext.sourceRect = rect;

//返回预览界面

return childVC;

}


//pop(按用点力进入)- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {

//    [self.view addSubview: viewControllerToCommit.view];

[self showViewController:viewControllerToCommit sender:self];

}


4、当弹出预览时,上滑预览视图,出现预览视图中快捷选项- (NSArray> *)previewActionItems {

// setup a list of preview actions

UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"删除" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"你点了-删除" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

[alert show];

}];

UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"置顶" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"点-置顶" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

[alert show];

}];

UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"嘎哈" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"不嘎哈" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

[alert show];

}];

NSArray *actions = @[action1,action2,action3];

// and return them (return the array of actions instead to see all items ungrouped)

return actions;

}

到此,3D Touch简单的使用就基本上实现了,如果以上有什么理解错误的地方,欢迎大家交流讨论。

你可能感兴趣的:(iOS开发3DTouch功能的实现)