iOS9 新特征之3D Touch實現(xiàn)

API介紹

UITouch類里API的變化

iOS9中添加的屬性

altitudeAngle

  • 當筆平行于平面時,該值為0
  • 當筆垂直于平面時,該值為Pi / 2

estimatedProperties

  • 當前觸摸對象估計的觸摸特性,返回值是UITouchPropertyies

updatedProperties

  • 當前觸摸對象已經(jīng)更新的觸摸特性,返回值是UITouchPropertyies

estimationUpdateIndex

  • 當每個觸摸對象的觸摸特性發(fā)生變化時,該值將會單獨增加,返回值是NSNumber

iOS9中添加的方法

  • PreciseLocationInView:當前觸摸對象的坐標
  • PrecisePreviousLocationInView:當前觸摸對象的前置坐標
  • azimuthAngleInview:沿著x軸正向的方位角,當與x軸正向方向相同時,該值為0;當view參數(shù)為nil時尔崔,默認為keyWindow
  • azimuthUnitVectorInView:當前觸摸對象的方向上的單位向量
    當view參數(shù)為nil時角撞,默認為keyWindow
UIForceTouchCapability
  • UIForceTouchCapabilityUnknown 不能確定是否支持壓力感應
  • UIForceTouchCapabilityUnavailable 不能支持壓力感應
  • UIForceTouchCapabilityAvailable 可以支持壓力感應

UITouchType

  • UITouchTypeDirect 垂直的觸摸類型
  • UITouchTypeIndirect 非初值的觸摸類型
  • UITouchTypeStylus 水平的觸摸類型

關于重按App icon展開菜單的實現(xiàn)

在項目的Appdelegate中找到如下方法呛伴,創(chuàng)建展開菜單

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

for example
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    UIViewController* vc = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    self.window.rootViewController = vc;

    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"我的消息" localizedSubtitle:nil icon:nil userInfo:nil];
    
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"發(fā)布動態(tài)" localizedSubtitle:nil icon:icon2 userInfo:nil];
    
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ico_discovery"];
    UIApplicationShortcutItem *item3= [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"搜索尋味師" localizedSubtitle:nil icon:icon3 userInfo:nil];
    application.shortcutItems = @[item3,item2,item1];
    
    
}

創(chuàng)建完之后就運行項目,看到效果啦谒所,如圖

image

之后可以在application:performActionForShortcutItem:completionHandler方法內(nèi)根據(jù)shortcutItem.type處理點擊事件

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

for example
if ([shortcutItem.type isEqualToString:@"item1"]) {    
    MyMessageViewController *vc = [[MyMessageViewController alloc] init];
    vc.hidesBottomBarWhenPushed = YES;
    [self.navigationController.tabBarController.selectedViewController pushViewController:vc animated:YES];
}

}

關于peek 和 pop的實現(xiàn)

效果圖
image

首先創(chuàng)建2個viewController,例如HomeViewControllerDetailPageViewController

  • HomeViewController:需要添加peek和pop的ViewController
  • DetailPageViewController:要展示的View Controller

在HomeViewController中添加<UIViewControllerPreviewingDelegate>,并注冊delegate

[self registerForPreviewingWithDelegate:self sourceView:self.view];

實現(xiàn)該Delegate的方法

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

CGPoint point = [self.view convertPoint:location toView:self.tableView];//根據(jù)loaction獲取其在不同坐標系中的點坐標热康,后面會通過這個取獲取數(shù)據(jù)的indexPath
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
CGRect cellRect = cell.frame;
context.sourceRect = cellRect;
Humors *humor = [(FinderInfo*)dataList[indexPath.row] humors][0];//這是我們項目的一個model,大家可以換成自己的model進行操作
    DetailPageViewController *controller = [[DetailPageViewController alloc]initWithFlavorId:[humor.param intValue]];//創(chuàng)建需要pop的ViewController        
    controller.view.frame = self.view.frame;
    return controller;

}

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

[self showViewController:viewControllerToCommit sender:self];

}

效果圖
image

然后在DetailPageViewController中實現(xiàn)peek操作

打開前面pop出的ViewController(DetailPageViewController)劣领,在實現(xiàn)文件中添加如下代碼

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

__weak typeof(self) weakSelf = self;
NSString *actionTitle = mUserRes.isAttention?@"取消關注":@"+關注";
UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:actionTitle style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    [weakSelf attention]; //這里添加你需要點擊后的操作
}];


UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    //這里添加你需要點擊后的操作
}];
NSArray *actions = @[p1,p2];
return actions;

}

Tips:判斷設備是否支持3D touch姐军,需要做判斷
  • self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable
  • [[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0f

必須要兩樣同時滿足,才可以使用尖淘,不作判斷會引起不支持3D Touch的手機編譯crash

部分內(nèi)容摘自簡書原地址點我

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奕锌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子村生,更是在濱河造成了極大的恐慌惊暴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趁桃,死亡現(xiàn)場離奇詭異辽话,居然都是意外死亡,警方通過查閱死者的電腦和手機卫病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門油啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟀苛,你說我怎么就攤上這事益咬。” “怎么了屹逛?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵础废,是天一觀的道長汛骂。 經(jīng)常有香客問我,道長评腺,這世上最難降的妖魔是什么帘瞭? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蒿讥,結果婚禮上蝶念,老公的妹妹穿的比我還像新娘。我一直安慰自己芋绸,他們只是感情好媒殉,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摔敛,像睡著了一般廷蓉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上马昙,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天桃犬,我揣著相機與錄音,去河邊找鬼行楞。 笑死攒暇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的子房。 我是一名探鬼主播形用,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼证杭!你這毒婦竟也來了田度?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤躯砰,失蹤者是張志新(化名)和其女友劉穎每币,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琢歇,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年梦鉴,在試婚紗的時候發(fā)現(xiàn)自己被綠了李茫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡肥橙,死狀恐怖魄宏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情存筏,我是刑警寧澤宠互,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布味榛,位于F島的核電站,受9級特大地震影響予跌,放射性物質發(fā)生泄漏搏色。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一券册、第九天 我趴在偏房一處隱蔽的房頂上張望频轿。 院中可真熱鬧,春花似錦烁焙、人聲如沸航邢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膳殷。三九已至,卻和暖如春九火,著一層夾襖步出監(jiān)牢的瞬間秽之,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工吃既, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留考榨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓鹦倚,卻偏偏與公主長得像河质,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子震叙,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 專著:http://www.reibang.com/p/3443a3b27b2d 1.簡單的介紹一下3D Touc...
    violafa閱讀 1,012評論 1 0
  • 1.簡單的介紹一下3D Touch 3D Touch的觸控技術掀鹅,被蘋果稱為新一代多點觸控技術。其實媒楼,就是此前在Ap...
    Camille_chen閱讀 12,044評論 19 33
  • 前言 關于這篇文章 由于iPhone 6S發(fā)布不到一年的時間乐尊,很多新特性、新技術還未普遍划址,不管是3D Touch的...
    Tangentw閱讀 4,477評論 8 18
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫扔嵌、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 禮貌是一個人的基本素養(yǎng)夺颤,所有的家長們痢缎,都希望自己的孩子是個守規(guī)矩、懂禮貌招人喜歡的孩子世澜,那家長要如何做独旷,才能培養(yǎng)出...
    晚霞A閱讀 558評論 0 0