3DTouch開發(fā)

圖片來自百度百科

3D Touch是一種立體觸控技術(shù),被蘋果稱為新一代多點觸控技術(shù),是在Apple Watch上采用的Force Touch,屏幕可感應(yīng)不同的感壓力度觸控。3D Touch,蘋果iPhone 6s的新功能,看起來類似 PC 上的右鍵。有Peek Pop 兩種新手勢。

2015年9月10日,蘋果在新品發(fā)布會上宣布了3D-Touch功能。
2016年6月13日,蘋果開發(fā)者大會WWDC在舊金山召開,會議宣布可以在待機(jī)畫面用3D Touch操作通知。

產(chǎn)品介紹

用力按一個圖標(biāo)會彈出一層半透明菜單,里面包含了該應(yīng)用下的一些快捷操作,在郵件列表上用力按也可以快速彈開窗口查看郵件,在郵件列表當(dāng)中,用力按郵件列表里的一條郵件就會顯示完整郵件內(nèi)容,松手就會關(guān)掉,無需左右滑動的打開關(guān)閉操作。輕點電話就可以查看最近聯(lián)系人,按壓相機(jī)可以快速自拍,按壓圖片庫可以快速瀏覽大圖

輕按彈出窗口預(yù)覽郵件內(nèi)容,增加拇指壓力時則可以全屏,在日程安排中輕輕用力按航班信息即可彈出窗口顯示航班信息。按住地圖圖標(biāo)即可彈出一些快速選項,Instagram中可以直接進(jìn)入自己的時間流或者友鄰動態(tài),在相機(jī)中可以通過輕按相機(jī)預(yù)覽拍的照片,而且在iOS9中可以快速通過邊緣輕按調(diào)出后臺??梢哉f,3D-Touch大幅度提升了手機(jī)操作的效率。
新iPhone增加了3D-Touch技術(shù),相對于多點觸摸在平面二維空間的操作,3D-Touch技術(shù)增加了對力度和手指面積的感知,可以通過長按快速預(yù)覽/查看你想要的短信/圖片/超鏈接等內(nèi)容,Peek和Pop手勢的響應(yīng)時間可迅捷到10ms和15ms。
相機(jī)與3D-Touch技術(shù)結(jié)合,相應(yīng)的相機(jī)中增加拍攝動態(tài)圖片的功能選項,查看時只需要用一定力道向圖片按下去,圖片就會動起來。

可以在待機(jī)畫面用3D Touch操作通知。

ShortcutItem

ShortcutItem 快捷方式
ShortcutItem 快捷方式

初始化ShortcutItem

- (void)createItemsWithIcons {
    // icons with my own images,icon size 35*35
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeFavorite];
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
    
    // create several (dynamic) shortcut items
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.touch.deep1" localizedTitle:@"喜愛" localizedSubtitle:@"我的收藏" icon:icon1 userInfo:nil];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.touch.deep2" localizedTitle:@"搜索" localizedSubtitle:@"搜索活動" icon:icon2 userInfo:nil];
    UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.touch.deep3" localizedTitle:@"分享" localizedSubtitle:@"分享到朋友圈" icon:icon3 userInfo:nil];
    
    // add all items to an array
    /**
     *  防止不支持設(shè)備引起崩潰
     */
    if (item1 && item2 && item3) {
        NSArray *items = @[item1, item2, item3];
        
        // add the array to our app
        [UIApplication sharedApplication].shortcutItems = items;
    }
}

ShortcutItem事件

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    // react to shortcut item selections
    NSLog(@"A shortcut item was pressed. It was %@.", shortcutItem.localizedTitle);
    
    // have we launched Deep Link Level 1
    if ([shortcutItem.type isEqualToString:@"com.touch.deep1"]) {
        NSLog(@"clicked deep1");
        PreviewViewController *vc = [PreviewViewController new];
        self.window.rootViewController = vc;
        [self.window makeKeyWindow];
    }
    
    if ([shortcutItem.type isEqualToString:@"com.touch.deep2"]) {
        NSLog(@"clicked deep2");
        [[LKGlobalNavigationController sharedInstance] pushViewControllerWithUrLPattern:PREVIEW_VIEW_CONTROLLER];
    }
    
    if ([shortcutItem.type isEqualToString:@"com.touch.deep3"]) {
        NSLog(@"clicked deep3");
    }
}

UIPreviewActionItem 快速操作

UIPreviewActionItem 快速操作
UIPreviewActionItem 快速操作

UIPreviewActionItem事件

// setup a list of preview actions
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"保存" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Default Action triggered");
    }];
    
    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Default Action triggered");
    }];
    
    UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"刪除" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Destructive Action triggered");
    }];
    
    // add them to an arrary
    NSArray *actions = @[action1, action2, action3];
    
    // add all actions to a group
//    UIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:actions];
//    NSArray *group = @[group1];
    
    // and return them (return the array of actions instead to see all items ungrouped)
    return actions;
}

Peek And Pop 預(yù)覽

Peek And Pop 預(yù)覽
Peek And Pop 預(yù)覽

注冊UIViewControllerPreviewingDelegate

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TestTableViewCell"];
    // Enable to use "-sizeThatFits:"
    cell.fd_enforceFrameLayout = NO;

    cell.entity = self.titleArray[indexPath.row%10];

    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        [self registerForPreviewingWithDelegate:self sourceView:cell];
    }
        
    return cell;
}

實現(xiàn)UIViewControllerPreviewingDelegate

# pragma mark - 3D Touch Delegate

// 輕壓顯示預(yù)覽頁面
// check if we're not already displaying a preview controller
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
    if ([self.presentedViewController isKindOfClass:[DetailViewController class]]) {
        return nil;
    }

    DetailViewController *detailView = [[DetailViewController alloc] init];
    
    return detailView;
}

// 重壓顯示詳情頁面
// alternatively, use the view controller that's being provided here (viewControllerToCommit)
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    [self showViewController:viewControllerToCommit sender:self];
}

參考文檔

百度百科

demo

3DTouchDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容