根据apple官方3D touch的例子写个3D Touch功能
			文章目录
		
			
		
		
		
		根据apple官方3D touch的例子写个3D Touch功能
一,3D touch sample下载
1.	
下载地址(文档)
- 下载后打开ApplicationShortcuts,发现是swift实现的,现在我们来按照官方文档的说话,再参照官方给的sample项目进行学习
 
1) 要使用3D touch 需要满足两个必要条件:
- ios9以上系统
 - iphone6以上
 
2) 如何设置(静态设置)
根据apple官方文档api的介绍:(Define static quick actions in your app’s Info.plist file in the UIApplicationShortcutItems array.)也就是在info.plist中有的UIApplicationShortcutItems节点下面需要定义快捷按钮(图标用的是系统的):
info.plist:
<key>UIApplicationShortcutItems</key>
  <array>
      <dict>
          <key>UIApplicationShortcutItemIconType</key>
          <string>UIApplicationShortcutIconTypeSearch</string>
          <key>UIApplicationShortcutItemSubtitle</key>
          <string>shortcutSubtitle1</string>
          <key>UIApplicationShortcutItemTitle</key>
          <string>shortcutTitle1</string>
          <key>UIApplicationShortcutItemType</key>
          <string>$(PRODUCT_BUNDLE_IDENTIFIER).First</string>
          <key>UIApplicationShortcutItemUserInfo</key>
          <dict>
              <key>firstShorcutKey1</key>
              <string>firstShortcutKeyValue1</string>
          </dict>
      </dict>
      <dict>
          <key>UIApplicationShortcutItemIconType</key>
          <string>UIApplicationShortcutIconTypeShare</string>
          <key>UIApplicationShortcutItemSubtitle</key>
          <string>shortcutSubtitle2</string>
          <key>UIApplicationShortcutItemTitle</key>
          <string>shortcutTitle2</string>
          <key>UIApplicationShortcutItemType</key>
          <string>$(PRODUCT_BUNDLE_IDENTIFIER).Second</string>
          <key>UIApplicationShortcutItemUserInfo</key>
          <dict>
              <key>secondShortcutKey1</key>
              <string>secondShortcutValue1</string>
          </dict>
      </dict>
  </array>
appDelegate impl:
- obj-c:
 
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
}
- swift:
 
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void){
}
3)动态设置
- obj-c:
 
UIApplication *app = [UIApplication sharedApplication]; 
//1.获取shortcutItems
NSArray *existingShortcutItems = [app shortcutItems];
//2.获取第0个shortcutItem  
UIApplicationShortcutItem *oldItem = [existingShortcutItems objectAtIndex: 0];  
//3.更新shortcutItems
//将旧的shortcutItem改变为可修改类型shortcutItem  
UIMutableApplicationShortcutItem *mutableItem = [oldItem mutableCopy];  
//修改shortcutItem的显示标题  
[mutableItem setLocalizedTitle: @“Share”];
//根据旧的shortcutItems生成可变shortcutItems数组  
NSMutableArray *updatedShortcutItems = [existingShortcutItems mutableCopy];  
//修改可变shortcutItems数组中对应index下的元素为新的shortcutItem  
[updatedShortcutItems replaceObjectAtIndex: 0 withObject: mutableItem];  
//修改应用程序对象的shortcutItems为新的数组  
[app setShortcutItems: updatedShortcutItems];
- swift:
 
 let shortcut3 = UIMutableApplicationShortcutItem(type: "Third", localizedTitle: "Play", localizedSubtitle: "Will Play an item", icon: UIApplicationShortcutIcon(type: .Play), userInfo: [
                    AppDelegate.applicationShortcutUserInfoIconKey: UIApplicationShortcutIconType.Play.rawValue
                ]
            )
            
            let shortcut4 = UIMutableApplicationShortcutItem(type: "Third", localizedTitle: "Pause", localizedSubtitle: "Will Pause an item", icon: UIApplicationShortcutIcon(type: .Pause), userInfo: [
                    AppDelegate.applicationShortcutUserInfoIconKey: UIApplicationShortcutIconType.Pause.rawValue
                ]
            )
            
            // Update the application providing the initial 'dynamic' shortcut items.
            application.shortcutItems = [shortcut3, shortcut4]
            
自定义设置3D touch图标
官方文档给出三个必要条件:
1.使用UIApplicationShortcutItemIconFile类型声明
2. 提供的图片必须是35*35的像素
3. 图片的颜色必须是单色(single color)
sample:
<dict>
            <key>UIApplicationShortcutItemIconFile</key>
            <string>customer_3DTouch</string>
            <key>UIApplicationShortcutItemSubtitle</key>
            <string>shortcutSubtitle3</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>shortcutTitle3</string>
            <key>UIApplicationShortcutItemType</key>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER).Second</string>
            <key>UIApplicationShortcutItemUserInfo</key>
            <dict>
                <key>thirdShortcutKey1</key>
                <string>thirdShortcutValue1</string>
            </dict>
        </dict>
                     
customer_3DTouch:
  
二,3D touch的peek&pop
实现3D touch的peek和pop需要三步:
- ios9以后在UIViewController里添加了一个UIViewControllerPreviewingDelegate协议,需要实现这个delegate
 - 注册开启使用peek&pop,在哪里用,sourceView就写哪个view
 
[self registerForPreviewingWithDelegate:self sourceView:homeCell];
3, 重载两个方法
- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
    
     Show3DViewController *childVC = (Show3DViewController *)InstantiateControllerFromXIB([Show3DViewController class]);
//     UIViewController *childVC = [[UIViewController alloc] init];
    
    childVC.preferredContentSize = CGSizeMake(0.0f,300.0f);
    
    CGRect rect = CGRectMake(10, location.y - 10, self.view.frame.size.width - 20,20);
    previewingContext.sourceRect = rect;
    return childVC;
}
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{
    
     [self showViewController:viewControllerToCommit sender:self]; 
}
  
	
