- 前言
蘋果官方文檔永遠是最好的學習iOS資料,沒有之一。
小編此刻感悟頗深,愿意把經驗跟大家交流。
- 目錄
1. Checking for 3D Touch Availability (檢查3D Touch 是否可用)
2. Home Screen quick action API (主屏幕快速選項)
3. UIKit peek and pop API
4. Web view peek and pop API (可以使用系統提供HTML鏈接預覽功能)
5. UITouch force properties (壓力值)
- 這里只做討論 UIKit peek and pop API
- 首先直接上Demo:
- 首先實現協議 UIViewControllerPreviewingDelegate
// 需要展示內容
- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0);
//pop回來的事件
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0);
然后對設備進行檢測,看看是否滿足3D Touch的條件
- (BOOL) Check3DTouch {
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
return YES;
}
return NO;
}
```
* 應用在運行時用戶也有可能關閉或開啟 3D Touch,這時會觸發traitCollectionDidChange代理方法,但代理方法previousTraitCollection參數是取到之前的狀態,所以還需要self.traitCollection.forceTouchCapability來判斷當前的狀態
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
//功能可用的情況下進行注冊
[self registerForPreviewingWithDelegate:self sourceView:self.tableView];
}else{
}
}
完成上面之后,出現的效果圖如下:

* 下面就來實現地步的選項卡 在TouchViewController文件里實現協議 UIPreviewActionItem 實現如下代碼
pragma mark - UIPreviewActionItem
ifdef __IPHONE_9_0
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems {
UIPreviewAction *act1 = [UIPreviewAction actionWithTitle:@"Touch one" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
// 添加點擊操作處理
SFSafariViewController *sf = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://www.baidu.com"]];
[self.viewController.navigationController pushViewController:sf animated:YES];
}];
UIPreviewAction *act2 = [UIPreviewAction actionWithTitle:@"Touch Two" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *act3 = [UIPreviewAction actionWithTitle:@"Touch Three" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
return [NSArray arrayWithObjects:act1,act2,act3, nil];
}
endif
* 效果圖如下

* 最后
參考文章 : https://developer.apple.com/ios/3d-touch/