iPhone6s&iPhone 6s plus發(fā)布也有一段時間了,最大的亮點應該就是3D-touch毋庸置疑了,第一時間體驗了之后最大的感受就是蘋果爸爸太給力了.......事實上我也從未見過第二家公司能把科技與易用性結合的如此天衣無縫的,當年5s指紋識別如此,今年的3D-touch亦如此.蘋果也開放了相關的api,作為一個開發(fā)者怎能不第一時間在自己的應用上面集成這個好玩的特性呢.
應用中使用3Dtouch有兩種方式:
- 第一種是按壓圖標啟動應用的時候,類似于pc上面的右鍵,但是又不同于右鍵,我們可以把它理解為一個快速入口,能夠有效的減少用戶的操作量.這里我們只能使用輕按手勢
shortCut
. - 第二種則是應用內的集成了,比如短信列表我們可以輕按預覽短信內容,發(fā)現(xiàn)感興趣的話再稍微用力進入詳情頁面,事實上目前大多數(shù)集成了3Dtouch的app也大多數(shù)是應用在這個使用場景,即在list-detail之間加了一層預覽,變成了list-preview-detail.
上篇先寫一下第一種場景如何集成.
這時候我們的所有代碼都是在app delegate里面完成的,當然我們也可以寫一個分類方便給app delegate瘦身.
在app delegate的代理方法didFinishLaunchingWithOptions里面做如下操作:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
///setup icons
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLocation];
UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause];
UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"favicon.png"];
///setup items
UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"first" localizedTitle:@"first item title" localizedSubtitle:@"first item detail title" icon:icon1 userInfo:nil];
UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"second" localizedTitle:@"second item title" localizedSubtitle:@"second item detail title" icon:icon2 userInfo:nil];
UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"third" localizedTitle:@"third item title" localizedSubtitle:@"third item detail title" icon:icon3 userInfo:nil];
UIMutableApplicationShortcutItem *item4 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"forth" localizedTitle:@"forth item title" localizedSubtitle:@"forth item detail title" icon:icon4 userInfo:nil];
NSArray *items = @[item1,item2,item3,item4];
[UIApplication sharedApplication].shortcutItems = items ;
UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
if (item) {
NSLog(@"3d launch item is %@",item.localizedTitle);
}else{
NSLog(@"normal launch");
}
return YES;
}
代碼還是非常簡單的,就是創(chuàng)建四個圖標,然后創(chuàng)建四個item,然后給shortcutItems賦值一個數(shù)組就可以了.
需要注意的是,使用了iconWithTemplateImageName
方法創(chuàng)建的自定義的圖標需要是正方形,單色,而且35*35point尺寸的,不然會顯示下面效果圖那種黑漆漆的效果.
Icons should be square, single color, and 35x35 points
而我們如果想監(jiān)聽是從哪個item啟動的應用,可以在以下方法里面操作:
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
NSLog(@"selected item's title is %@",shortcutItem.description);
}
可以看到打印信息:
6.jpg
所以這里我們就可以通過shortcutItem.type來判斷從哪個入口進入的了,所以我們在調用
- (instancetype _Nonnull)initWithType:(NSString * _Nonnull)type localizedTitle:(NSString * _Nonnull)localizedTitle localizedSubtitle:(NSString * _Nullable)localizedSubtitle icon:(UIApplicationShortcutIcon * _Nullable)icon userInfo:(NSDictionary * _Nullable)userInfo
初始化item的時候,可以自定義一個枚舉來作為type參數(shù),方便以后判斷.
最終效果如下:
7.jpg
你可以在這里下載這個demo
一個問題:
微信實現(xiàn)的圖標居右是如何實現(xiàn)的呢?因為沒有找到相關的api,難道是通過runtime來修改title跟icon的frame來做到的?
好傻逼的問題,突然發(fā)現(xiàn)圖片左右是取決于圖標在屏幕上的問題........草草草草草