关于3D touch 一些简单实用

来源:互联网 发布:吾生也有涯 知也无涯 编辑:程序博客网 时间:2024/05/18 13:10

     一、  3D touch简单使用,一般开发用到两种情况

     1、在app图标上使用3D Touch

     2、在程序内使用3D Touch;

     

     现在说一下第一种在app图标上使用3D Touch

     这个一般也有两种方法去实现它

        1)首先可以在info.plist里面添加一些key在里面进行添加items(静态添加)

            

            步骤添加一个key 'UIApplicationShortcutItems'数据类型为Array

     

                   再在这个刚刚生成的数组里面添加一个item数据类型为 Dictionary

     

                   添加一个Item之后吉给他添加一些关键字(类似属性)一样的东西,下面是属性的解释

                   

                   UIApplicationShortcutItemType: 快捷可选项的特定字符串(必填)

                   UIApplicationShortcutItemTitle: 快捷可选项的标题(必填)

                   UIApplicationShortcutItemSubtitle: 快捷可选项的子标题(可选)

                   UIApplicationShortcutItemIconType: 快捷可选项的图标(可选)

                   UIApplicationShortcutItemIconFile: 快捷可选项的自定义图标(可选)

                   UIApplicationShortcutItemUserInfo: 快捷可选项的附加信息(可选)

                    

                   好了运行程序就可以看到了,6s以后的手机才有这个功能,当然还有他的回调方法(也就是响应事件)这个在后面一起讲吧

     

        2UIApplicationShortcutItem这个类代表就是icon 下面的代码一般我是放在appdelegate里面



    /*

     创建item的方法

     - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo;

     

     type: 快捷可选项的特定字符串(必填)

     localizedTitle: 快捷可选项的标题(必填)

     localizedSubtitle: 快捷可选项的子标题(可选)

     icon: 快捷可选项的图标(可选) 这个可以自定义图片,我已经在下面列出来了

     userInfo: 快捷可选项的附加信息(可选)

     */

    

    //创建

    UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItemalloc]initWithType:@"two"localizedTitle:@"分享1"localizedSubtitle:@"尽情分享吧!1"icon:[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeShare]userInfo:nil];

    

    UIApplicationShortcutItem * item2 = [[UIApplicationShortcutItemalloc]initWithType:@"two"localizedTitle:@"分享2"localizedSubtitle:@"尽情分享吧!2"icon:[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeShare]userInfo:nil];

    

    UIApplicationShortcutItem * item3 = [[UIApplicationShortcutItemalloc]initWithType:@"two"localizedTitle:@"分享3"localizedSubtitle:@"尽情分享吧!3"icon:[UIApplicationShortcutIconiconWithTemplateImageName:@"xxx.png"]userInfo:nil];

    

    UIApplicationShortcutItem * item4 = [[UIApplicationShortcutItemalloc]initWithType:@"two"localizedTitle:@"分享4"localizedSubtitle:@"尽情分享吧!4"icon:[UIApplicationShortcutIconiconWithTemplateImageName:@"xxx.png"]userInfo:nil];

    //添加

    [UIApplicationsharedApplication].shortcutItems =@[item1,item2,item3,item4]

这个是图片类型,我是盗来的,保存看看还行



重点来了 ,点击事件之后,没有回调方法也是不行的

在AppDelegate中 添加

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

这个方法就行了,这个方法也不难,最主要是shortcutItem参数,你点击的信息都在里面



 我现在举个例子吧,前面一个AController tableViewcell空间通过Peek & Pop进入下一个BController

     

     步骤,在AController遵守协议<UIViewControllerPreviewingDelegate>

     实现下面两个方法

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

     {

     [self.navigationController pushViewController:viewControllerToCommit animated:YES];

     }


     

     再在你需要使用Peek & Pop功能的控件中实用这个方法 (我是用cell演示的,所以我放在tableView的代理方法里面)

     [self registerForPreviewingWithDelegate:self sourceView:cell];

     

     当进入peek的时候(也就是小窗口的时候)会回调下面方法

     - (nullable UIViewController *)previewingContext:(id <uiviewcontrollerpreviewing>)previewingContext viewControllerForLocation:(CGPoint)location

     {

     // previewingContext.sourceView: 触发Peek & Pop操作的视图

     // previewingContext.sourceRect: 设置触发操作的视图的不被虚化的区域

     

     BController *bVC = [[BController alloc] init];

     

     // 预览区域大小(可不设置)

     detailVC.preferredContentSize = CGSizeMake(0, 300);

     

     return detailVC;

     }

     

     

     当进入Pop状态时,系统会回调如下方法

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

     {

     [self.navigationController pushViewController:viewControllerToCommit animated:YES];

     }

     

     

     Peek时希望提供一些快捷选项,需要在DetailViewController中重写previewActionItemsgetter方法

     - (NSArray<id<uipreviewactionitem>> *)previewActionItems

     {

     UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"选项一" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

     

     }];

     

     UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"选项二" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

     

     }];

     

     UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"选项三" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

     

     }];

     

     UIPreviewActionGroup *actionGroup = [UIPreviewActionGroup actionGroupWithTitle:@"选项组" style:UIPreviewActionStyleDefault actions:@[action1, action2]];

     

     return @[action1, action2, action3, actionGroup];

     }




0 0