3DTouch概覽
- 備受矚目的6s及6s Plus上市以來,3DTouch也進入了人們的視線.它主要有如下圖所示的幾個用途??:
3DTouch.png
是不是看起來很炫酷吊炸天哈哈哈?
親們先來預覽下效果圖哈:
酷炫吊炸天3DTouch
這里給出官方鏈接:API資料 查閱資料
Quick Actions用法
- 用法步驟so easy.
-
第一步,在
APPDelegate
類application:didFinishLaunchingWithOptions:
方法里碼代碼. -
第二步,在
APPDelegate
類寫3DTouch對應的代理application:performActionForShortcutItem:completionHandler:
方法.
-
第一步,在
- 廢話不多說,直接上代碼.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 首先判斷是否支持3DTouch
if(self.window.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
[self setup3DTouch:application];
}
return YES;
}
- (void)setup3DTouch:(UIApplication *)app
{
// 設置圖標icon (UIApplicationShortcutIconTypeMarkLocation為系統提供的樣式之一)
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMarkLocation];
// 設置shortcutItem
//
// type : 唯一標識
// localizedTitle : 標題
// localizedSubtitle : 子標題
// icon : 圖標
// userInfo : 傳遞的字典
UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"Sweet" localizedSubtitle:@"honey" icon:icon1 userInfo:nil];
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCloud];
UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"Super" localizedSubtitle:@"me" icon:icon2 userInfo:nil];
UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMessage];
UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"Legend" localizedSubtitle:@"logo" icon:icon3 userInfo:nil];
// 加入到shortcutItems數組中
app.shortcutItems = @[item1, item2, item3];
}
#pragma mark - UIApplicationDelegate
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
if([shortcutItem.type isEqualToString:@"item1"])
{
NSLog(@"to do sth...");
}
}
- 實現出來的效果如圖:
效果圖.jpeg
- 或者可以使用info.plist靜態添加3DTouch,方法更是easy,直接上圖:
靜態添加3DTouch按鈕.png
Peek and Pop用法
-
簡單介紹: 經過授權的應用的試圖控制器可以響應用戶不同的按壓力量,隨著按壓力量的增加,會有三個交互階段:
- 暗示預覽功能可用,會有一個虛化的效果.
- ** Peek**:展示預覽的視圖以及快捷選項菜單(peek quick action).
- Pop:跳轉到預覽的視圖控制器.
- 使用步驟:
- 第一步,首先要判斷設備是否支持3DTouch,并且要判斷在運行環境改變的情況下3DTouch是否可用.
- ** 第二步**,遵守
UIViewControllerPreviewingDelegate
代理,實現代理的2個方法. - ** 第三步,給響應Peek&Pop**手勢的視圖進行注冊.
-
最后一步, 向上滑動預覽視圖的時候,在視圖下方可以展示一些選項去操作,可以通過在預覽視圖控制器中添加
previewActionItems
來實現.
- 來,不說廢話,代碼,走起!
#pragma mark - life cycle
//頁面一進來最好先判斷下3DTouch是否可用,不可用就尷尬了??
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
NSLog(@"do sth");
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// 給響應Peek&Pop手勢的視圖進行注冊,這里是給一個imageView進行注冊??
[self registerForPreviewingWithDelegate:self sourceView:self.imgView];
}
#pragma mark - 3DTouch
// Called when the iOS interface environment changes.
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{ // 環境變化時判斷3DTouch是否可用
if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
NSLog(@"do sth");
}
}
#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
// 通過上下文可以調整不被虛化的范圍
previewingContext.sourceRect = CGRectMake(10, 10, 10, 10);
// 預覽控制器是我的另外一個控制器??
AXEParticleViewController *vc = [AXEParticleViewController new];
return vc;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
// 這個相當于push操作,push到預覽的控制器
[self showViewController:viewControllerToCommit sender:self];
}
#pragma mark - ??下面代碼是在預覽控制器中寫的??
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
// 生成UIPreviewAction
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"one" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 1");
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"two" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 2");
}];
// 添加到數組里返回
NSArray *actions = @[action1, action2];
return actions;
}
- 到此,大功告成!