- 前言
蘋果官方文檔永遠是最好的學習iOS資料狈蚤,沒有之一。
小編此刻感悟頗深,愿意把經(jīng)驗跟大家交流比然。
- 目錄
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 (可以使用系統(tǒng)提供HTML鏈接預覽功能)
5. UITouch force properties (壓力值)
- 這里只做討論 UIKit peek and pop API
- 首先直接上Demo:
- 首先實現(xiàn)協(xié)議 UIViewControllerPreviewingDelegate
// 需要展示內(nèi)容
- (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);
然后對設(shè)備進行檢測榜旦,看看是否滿足3D Touch的條件
- (BOOL) Check3DTouch {
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
return YES;
}
return NO;
}
```
* 應用在運行時用戶也有可能關(guān)閉或開啟 3D Touch,這時會觸發(fā)traitCollectionDidChange代理方法弛姜,但代理方法previousTraitCollection參數(shù)是取到之前的狀態(tài)柠硕,所以還需要self.traitCollection.forceTouchCapability來判斷當前的狀態(tài)
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
//功能可用的情況下進行注冊
[self registerForPreviewingWithDelegate:self sourceView:self.tableView];
}else{
}
}
完成上面之后,出現(xiàn)的效果圖如下:
![IMG_0260.PNG](http://upload-images.jianshu.io/upload_images/2879573-7bd5b4a9f7a991fa.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 下面就來實現(xiàn)地步的選項卡 在TouchViewController文件里實現(xiàn)協(xié)議 UIPreviewActionItem 實現(xiàn)如下代碼
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
* 效果圖如下
![IMG_0261.PNG](http://upload-images.jianshu.io/upload_images/2879573-38f00d59bdc04930.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 最后
參考文章 : https://developer.apple.com/ios/3d-touch/