iOS新特性实现3DTouch开发

好久没有写过文章了,今天就给大家带来一篇比较简单的开发教程吧!目的是为了让大伙能够避开那些不必要的坑,快速高效的实现功能。今天呢来和大家讲一下iOS9的新特性3DTouch开发(iOS10都已经出了Beta版,这篇教程真是来的有点晚……)

3DTouch的功能就是用户可以在HomeScreen上通过用力按压屏幕,使屏幕弹出快捷菜单,就好像是我们在Windows上右键鼠标一样,效果图如下:
这里写图片描述


实现3DTouch有两种方式,一种是通过配置info.Plist来实现的静态方式,另一种是通过代码控制的动态方式。

静态方式实现3DTouch

实现info.Plist中的如下配置

<array>
        <dict>
            <key>UIApplicationShortcutItemIconType</key>
            <string>UIApplicationShortcutIconTypeShare</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>分享</string>
            <key>UIApplicationShortcutItemType</key>
            <string>3dtouch.share</string>
        </dict>
    </array>

解释一下:
1.UIApplicationShortcutItemIconType 3DTouch图标的类型,例如分享,下载,播放,搜索等等
它的值可以选如下这些:

typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) {
    UIApplicationShortcutIconTypeCompose,
    UIApplicationShortcutIconTypePlay,
    UIApplicationShortcutIconTypePause,
    UIApplicationShortcutIconTypeAdd,
    UIApplicationShortcutIconTypeLocation,
    UIApplicationShortcutIconTypeSearch,
    UIApplicationShortcutIconTypeShare,
    UIApplicationShortcutIconTypeProhibit       NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeContact        NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeHome           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeMarkLocation   NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeFavorite       NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeLove           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeCloud          NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeInvitation     NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeConfirmation   NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeMail           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeMessage        NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeDate           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeTime           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeCapturePhoto   NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeCaptureVideo   NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeTask           NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeTaskCompleted  NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeAlarm          NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeBookmark       NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeShuffle        NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeAudio          NS_ENUM_AVAILABLE_IOS(9_1),
    UIApplicationShortcutIconTypeUpdate         NS_ENUM_AVAILABLE_IOS(9_1)
} NS_ENUM_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

2.UIApplicationShortcutItemTitle 3DTouch显示的标题,这个值不能没有
3.UIApplicationShortcutItemType 3DTouch的标识符 ,这个值不能没有,我们通过这个标识符来判断触发的是哪个按钮。
4.除了这几个必要的值以为,我们还可以往里面传入例如:
UIApplicationShortcutItemSubtitle 设置标签的副标题
UIApplicationShortcutItemIconFile 设置标签的Icon文件
UIApplicationShortcutItemUserInfo:字典信息,如传值使用

info.Plist设置完了以后,我们还要加入捕获操作的的响应代码,我们在AppDelegate.m中加入如下代码:

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

在逻辑中使用shortcutItem.type来判断是哪个按钮触发的消息。

通过info.Plist得到的效果图如下:

这里写图片描述


2.动态方式实现3DTouch

在AppDelegate.m中加入如下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    NSLog(@"+++++++didFinishLaunchingWithOptions+++++++");
    //3D Touch按压程序图标的快捷项
    //快捷菜单的图标
    UIApplicationShortcutIcon *icon1=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCaptureVideo];
    UIApplicationShortcutIcon *icon2=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    UIApplicationShortcutIcon *icon3=[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon.png"];

    //快捷菜单
    UIApplicationShortcutItem *item1=[[UIApplicationShortcutItem alloc]initWithType:@"test1"
                                                                     localizedTitle:@"测试1"
                                                                  localizedSubtitle:nil
                                                                               icon:icon1
                                                                           userInfo:nil];
    UIApplicationShortcutItem *item2=[[UIApplicationShortcutItem alloc]initWithType:@"test2"
                                                                     localizedTitle:@"测试2"
                                                                  localizedSubtitle:@"这是测试2"
                                                                               icon:icon2
                                                                           userInfo:nil];
    UIApplicationShortcutItem *item3=[[UIApplicationShortcutItem alloc]initWithType:@"测试3"
                                                                     localizedTitle:@"搜索"
                                                                  localizedSubtitle:nil
                                                                               icon:icon3
                                                                           userInfo:nil];
    //设置app的快捷菜单
    [[UIApplication sharedApplication] setShortcutItems:@[item1,item2,item3]];

    return YES;
}

在上述代码中,我动态的创建了3个3DTouch的选项,当我们通过标签进入app时,就会在appdelegate中调用这样一个回调,我们可以获取shortcutItem的信息进行相关逻辑操作:

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

    NSString *title = nil;
    if([shortcutItem.type isEqualToString:@"test1"]){
        title=@"测试1";
    }else if([shortcutItem.type isEqualToString:@"test2"]){
        title=@"测试2";
    }else if([shortcutItem.type isEqualToString:@"test3"]){
        title=@"测试3";
    }

    //这里就弹个框子意思一下
    //由于UIAlertView在iOS 9被废弃,因此选用UIAlertController
    UIAlertController *alertController=[UIAlertController alertControllerWithTitle:@"提示"
                                                                          message:[NSString stringWithFormat:@"你点击了“%@”",title]
                                                                   preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *action=[UIAlertAction actionWithTitle:@"知道了"
                                                  style:UIAlertActionStyleDefault
                                                handler:^(UIAlertAction  *action) {
                                                    [alertController dismissViewControllerAnimated:YES completion:nil];
                                                }];
    [alertController addAction:action];
    [self.window.rootViewController presentViewController:alertController
                                                 animated:YES
                                               completion:nil];
}

这样我们的动态创建方式也完成了。


总结

因为3DTouch的预览功能不太好演示,所以在此就不在做操作了,大家可以通过头文件来熟悉一下它的一些特性,另外3DTouch在UIView中也增加了预览的功能,下篇文章,我们再来讲下关于3DTouch的Pop和Peek功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章