iOS- 指壓即達,如何整合iOS9裡的3D Touch,ios-ios9

來源:互聯網
上載者:User

iOS- 指壓即達,如何整合iOS9裡的3D Touch,ios-ios9
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/
本文著作權歸作者和部落格園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文串連。  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.