iOS- 指壓即達,如何集成iOS9里的3D Touch


1.前言  

 
隨着6S的到來,3DTouch被各大熱門APP迅速普及,博主親自體驗后,發現使用便捷性大幅提高,隨后自己照着文檔,寫了個Demo出來,分享給大家,希望能對有需要的朋友提供有一些幫助。

2.如何使用3D Touch?  

2.1.主界面重按APP圖標,彈出Touch菜單  

AppleDelegate文件中的程序入口處配置:

didFinishLaunchingWithOptions

    //給App圖標添加3D Touch菜單
    //拍照

    //菜單圖標
    UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    //菜單文字
    UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"拍照"];
    //綁定信息到指定菜單
    itemCamera.icon = iconCamera;

    //相冊
    //菜單圖標
    UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
    //菜單文字
    UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"相冊"];
    //綁定信息到指定菜單
    itemPhotoLibrary.icon = iconPhotoLibrary;
    //綁定到App icon
    application.shortcutItems = @[itemCamera,itemPhotoLibrary];

 彈出菜單,我們需要讓用戶點擊后跳轉指定頁面

這里我們會用到AppDelegate里新增加的一個方法

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

 讓后我們需要在這個方法里做跳轉的操作

    //照相type
    if ([shortcutItem.type isEqualToString:@"1"]) {
       
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
        picker.allowsEditing = YES;//設置可編輯
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self.window.rootViewController presentViewController:picker animated:YES completion:nil];//進入照相界面
       
    }
    //相冊type
    if ([shortcutItem.type isEqualToString:@"2"]) {
       
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
        picker.allowsEditing = YES;//設置可編輯
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self.window.rootViewController presentViewController:picker animated:YES completion:nil];//進入圖片庫

 點擊后分別會進入相機和相冊

 

2.2. 3DTouch輕按預覽功能,預覽時底部菜單的添加  

首先我們要把輕按預覽長按手勢區分開來,這里要在初始化時做一個基本的檢測。
 
nterface ViewController () <UIViewControllerPreviewingDelegate>
{
    UILongPressGestureRecognizer *_longPress;
}
@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UILongPressGestureRecognizer *longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo)];
    _longPress = longPressGr;
}


//檢測頁面是否處於3DTouch
- (void)check3DTouch{
   
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
       
        [self registerForPreviewingWithDelegate:self sourceView:self.view];
        NSLog(@"3D Touch 開啟");
        //長按停止
        _longPress.enabled = NO;
       
    }else{
        _longPress.enabled = YES;
    }
   
}


- (void)viewWillAppear:(BOOL)animated{
   
    [self check3DTouch];
   
}

 

然后我們需要實現 UIViewControllerPreviewingDelegate的協議

@interface ViewController () <UIViewControllerPreviewingDelegate>
//然后實現代理方法
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;

 

#pragma mark >> 3D touch 代理方法
//輕按進入浮動預覽頁面
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
    
    //注意這里我因為測試,沒做具體的位置處理,如果需要定位到具體的圖片Cell位置的話,可以用location通過tableView的convertPoint來取到指定Cell
    
    ASPreviewViewController *vc = [[ASPreviewViewController alloc] init];
    vc.view.frame = self.view.frame;
    UIImageView *er = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"123.png"]];
    vc.view = er;
    return vc;
    
}

 

 完成后可以實現基本的預覽效果:

 

最后我們加上一個

預覽時下滑底部菜單的添加

在我們剛剛創建的預覽控制器ASPreviewViewController里實現 UIViewControllerPreviewingDelegate的協議

然后重寫它的代理方法

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

 

//預覽頁面 底部Action Items
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
    
    UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"點擊了分享");
    }];
    
    UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@"收藏" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"點擊了收藏");
    }];
    
    NSArray *actions = @[p1,p2];
    return actions;
}

 

作者:  清澈Saup
出處:  http://www.cnblogs.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
 
 

 


免責聲明!

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



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