iOS之3DTouch的使用---很簡單,看我就夠啦~~


 

3DTouch是蘋果在iOS9之后新推出的功能,功能大致可以分成兩種,一種是長按app的icon,會出現以下的界面,還有一種是在app內部的某個視圖上使用,效果如下圖。 詳細的效果也可以參見微信。微信就集成了這些功能,在微信的首頁                                                  

 

 

第一個3DTouch的實現直接在AppDelegate類里面實現就行了,貼代碼啦

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    [self setup3DTouch:application];

    return YES;

}

 

// 3DTouch點擊的回調方法

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler

{

    NSLog(@"------%@",shortcutItem);

}

 

- (void)setup3DTouch:(UIApplication *)application

{

    /**

     type item 唯一標識符

     localizedTitle :標題

     localizedSubtitle:副標題

     iconicon圖標 可以使用系統類型 也可以使用自定義的圖片

     userInfo:用戶信息字典 自定義參數,完成具體功能需求

     */

    //    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"標簽.png"];

    UIApplicationShortcutIcon *cameraIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];

    UIApplicationShortcutItem *cameraItem = [[UIApplicationShortcutItem alloc] initWithType:@"typeOne" localizedTitle:@"功能1" localizedSubtitle:@"" icon:cameraIcon userInfo:nil];

    

    UIApplicationShortcutIcon *shareIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];

    UIApplicationShortcutItem *shareItem = [[UIApplicationShortcutItem alloc] initWithType:@"typeTwo" localizedTitle:@"功能2" localizedSubtitle:@"" icon:shareIcon userInfo:nil];

    /** items 添加到app圖標 */

    application.shortcutItems = @[cameraItem,shareItem];

}

 

關於在app內部的3DTouch效果,可以參見微信的首頁。

微信的首頁是一個tableview列表,在實現表的協議方法的時候需要在這個方法里面注冊

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

注冊的方法如下:

    // cell注冊綁定,設置代理,實現協議

    if ([self respondsToSelector:@selector(traitCollection)]) {

        if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)]) {

            if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

                [self registerForPreviewingWithDelegate:self sourceView:cell];

            }

        }

    }

聲明協議     <UIViewControllerPreviewingDelegate>

實現此協議的代理方法

#pragma mark - UIViewControllerPreviewingDelegate

// 3DTouch結束時預覽的界面 這里預覽的界面是--DetailViewController--

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location

{

    NSIndexPath *index = [mainTableView indexPathForCell:(UITableViewCell *)[previewingContext sourceView]];

    

    DetailViewController *VC = [[DetailViewController alloc] init];

    VC.viewTitle = [NSString stringWithFormat:@"%ld",(long)index.section];

    

    previewingContext.sourceRect = previewingContext.sourceView.frame;

    return VC;

}

 

// 點擊功能模塊需要實現的方法

-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit

{

    [self showViewController:viewControllerToCommit sender:self];

}

 注意,這里預覽的界面是   DetailViewController  ,需要在 DetailViewController.m文件中實現下面的方法,這個是預覽界面需要實現的點擊功能

// 預覽界面需要實現的點擊功能

- (NSArray<id<UIPreviewActionItem>>*)previewActionItems

{

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

        NSLog(@"%s, line = %d, action0 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);

    }];

    

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

        NSLog(@"%s, line = %d, action1 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);

    }];

    

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

        NSLog(@"%s, line = %d, action2 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);

    }];

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

        NSLog(@"%s, line = %d, action2 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);

    }];

    

    //該按鈕可以是一個組,點擊該組時,跳到組里面的按鈕.

    UIPreviewActionGroup *actionGroup = [UIPreviewActionGroup actionGroupWithTitle:@"actionGroup" style:UIPreviewActionStyleSelected actions:@[action2, action3]];

    //直接返回數組.

    return  @[action0,action1,actionGroup];

}

 

--over--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM