jaybin的技术博客

IOS开发者 热爱生活 热爱一切美好的事物

IOS 3D Touch 开发教程

         前一阵子伴随着苹果发布新产品iPhone6s 和 IOS9新系统,一系列关于硬件和软件的新功能、新特性逐渐进入iPhone用户的视线。这次我们就来讲讲传闻已久的3D Touch。

        当然这个新功能不仅仅需要手机系统更新到最新的IOS9系统,更需要设备必须是iPhone6s及以上。哈哈哈。。。所以,这个功能目前也只能是iPhone6s的用户才能体验到。总的来说苹果推出3D Touch这个功能的目的和去年推出IOS8的时候推出扩展today的目的是一样:增加APP的快捷入口,方便和简化用户进入APP相应功能的路径,让用户更快的找到自己需要的应用功能。苹果官方文档对3D Touch的说明是这样的:

With iOS 9, new iPhone models add a third dimension to the user interface.

1、A user can now press your Home screen icon to immediately access functionality provided by your app.
2、Within your app, a user can now press views to see previews of additional content and gain accelerated access to features.
        意思大概是这样的:

      1、用户可以通过3D Touch手势,按压主屏幕上的应用Icon,可以直接进入应用的相应的功能模块。(手机桌面上APP相应模块的快捷入口)

      2、用户可以通过3D Touch手势,按压对应的视图来预览视图的更多内容。(视图信息的快速预览)

       光靠上面的文字描述确实显得很苍白抽象。那么我们来看一下国内一些主流APP对于3D Touch功能的具体应用。

      就拿QQ来说,关于第一条说明的应用场景如下图的:


        我们可以通过一定力度按压桌面上QQ应用的图标,就可以出现一个快捷操作的视图。可以快速进入“扫一扫”或者“加好友”等其他模块。

        关于第二条说明的应用场景如下图的:

                   

         在消息的列表页面,用力按压某一条对话消息,就可以预览这条对话消息的具体内容。

        看完了具体的应用场景,我们一定很好奇这个3D Touch功能到底是怎么实现?其实3D Touch的实现一点也不复杂,相对于IOS8推出的today来说简单很多,基本不需要太多的代码操作。我们可以通过两个方式来实现3D Touch。

        1、通过设置标签:在项目的info.plist文件设置相应的标签就基本上可以完成大体工作了!

        2、通过代码的方式配置3D Touch。

        那么我们先来看一下代码方式是如何实现的:

        IOS9为 UIApplication类新增了一个属性shortcutItems来统一设置和管理应用的 3D Touch功能。

@class UIApplicationShortcutItem;
@interface UIApplication (UIShortcutItems)
// Register shortcuts to display on the home screen, or retrieve currently registered shortcuts.
@property (nullable, nonatomic, copy) NSArray<UIApplicationShortcutItem *> *shortcutItems NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;
@end

         属性 shortcutItems是一个数组类型的数据,数组里面的数据是  UIApplicationShortcutItem类的对象。

UIApplicationShortcutItem类也是IOS9为配置3D Touch而新增的类。也许我们已经猜到了,一个UIApplicationShortcutItem对象就是在桌面长按应用Icon弹窗视图中的一个栏目。也就是上面“扫一扫”栏目的入口。同时UIApplication类还新增了一个代理方法来处理3D Touch对应的手势操作。

// Called when the user activates your application by selecting a shortcut on the home screen,
// except when -application:willFinishLaunchingWithOptions: or -application:didFinishLaunchingWithOptions returns NO.
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

       具体的代码实现:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    //栏目1
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];
    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"入口1" localizedSubtitle:@"入口1副标题" icon:icon1 userInfo:nil];

    //栏目2
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"入口2" localizedSubtitle:@"入口2副标题" icon:icon2 userInfo:nil];
    
    //栏目3
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause];
    UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"入口3" localizedSubtitle:@"入口3副标题" icon:icon3 userInfo:nil];
    
    //栏目4
    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    UIApplicationShortcutItem *item4 = [[UIApplicationShortcutItem alloc] initWithType:@"item4" localizedTitle:@"入口4" localizedSubtitle:@"入口4副标题" icon:icon4 userInfo:nil];
    
    //设置 shortcutItems   需要注意的是shortcutItems数组最多只能加入四个item,超过四个只会显示前面的四个
    application.shortcutItems = @[item1, item2, item3, item4];    
    
    return YES;
}

 

#pragma mark -  3D Touch 代理方法
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
    //根据Item对应的type标识处理对应的点击操作
    NSString *itemType = shortcutItem.type;
    if([@"item1" isEqualToString:itemType]){
        
    }
    else if([@"item2" isEqualToString:itemType]){
        
    }
    else if ([@"item3" isEqualToString:itemType]){
        
    }
    else if ([@"item4" isEqualToString:itemType]){
        
    }
    
}

        其中,UIApplicationShortcutIcon类就是设置每一个item项目的图标,这个图标可以是系统的图标也可以是自定义的图标。该类提供两个初始化方法来供我们选择:iconWithType:方法设置系统图标 ,iconWithTemplateImageName:方法设置自定义图标。具体的使用可以去查看该类的API。

        UIApplicationShortcutItem类中的几个属性需要说明一下。Type属性是用来标识每一个item项目的,通过这个标识我们可以区分点击相应的每一项该触发哪些操作(在3D Touch的代理方法中就是靠Type属性来区分点击的是哪一项)。localizedTitle属性是每一个item的标题。localizedSubtitle属性是每个item的副标题,这个副标题可有可无。icon属性也就是上面说的每个item对应的图标了。userInfo属性是信息字典,用于传值,这里设为空。

        需要注意的是,根据本人的试验: UIApplication类的shortcutItems数组最多只能放四个item。也就是说通过3D Touch按压桌面应用Icon弹出的操作视图,该视图里面最多只能有四个快捷入口选项。超过四个只能显示最前面的四个。

        到这里我们就通过代码的方式实现了3D Touch功能了。

       下面讲一下通过设置标签的形式实现3D Touch功能。我们只需要设置静态标签然后在UIApplication类中实现3D Touch的代理方法就可以了,静态标签是我们在项目的配置plist文件中配置的标签,只要设置好对应的标签和键值对就没问题。


        上面的代码实现的应用效果如下图:




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/He_jiabin/article/details/50775001
文章标签: IOS开发 3D Touch
个人分类: IOS开发
想对作者说点什么? 我来说一句

iOS 3D Touch开发基本功能

2015年10月20日 135KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭