3D Touch功能之shortcut简析

7 篇文章 0 订阅
6 篇文章 0 订阅

       牛B的6S带上了3D Touch功能,最近忍不住,一咬牙一跺脚,卖了个“肾”,入手一个6s,迫不及待的去看了看3D Touch功能,用起来还是蛮爽的,于是乎就烦了翻果子的开发文档,自己搞了个非常简单的demo,顺便记录一下,以免下次用到时,到处找不到。

       ShortCut分为静态和动态两种方式实现,静态方式即在info.plist文件中添加对应的项目即可;动态方式通过代码在程序运行中增加,但千万别认为只有程序在运行时才能够看到,如果这样的话,那就失去了ShortCut的意义了。静态与动态的区别在于,静态方式用户安装后即可使用,动态方式需要程序运行过后才可使用。

       1、静态方式

             打开我们的测试用例工程ShortCut,展示Info,如图:

         

  

         添加一个UIApplicationShortcutItems键值的数组,而数组中对应的每个字典对象就是我们要展示的ShortcutItems,每个Items里面对应的属性分为必选项和选填项。

         必选项:

         UIApplicationShortcutItemTitle                    item标签标题

         UIApplicationShortcutItemType                   item类型,我的理解是开发者自己定义的一个字符串,用于区分不同快捷菜单

         选填项:

         UIApplicationShortcutItemSubtitle               item的子标题

         UIApplicationShortcutItemIconType            item标签的Icon类型,系统默认提供了几种类型的,如UIApplicationShortcutItemIconTypeShare

         UIApplicationShortcutItemIconFile              item标签的Icon文件

         UIApplicationShortcutItemUserInfo             item对用的用户数据(传值)

       2、动态方式

          动态方式主要通过iOS9中提供的几个类去创建Shortcut对象,并添加,与之相关的类主要有:

          UIMutableApplicationShortcutItem             可变的3D Touch标签类

          UIApplicationShortcutIcon                          标签中的图片Icon类

          UIApplicationShortcutItem                         不可变的3D Touch标签类


          2.1 创建Shortcut

              此处多贴出一些代码,便于大家理解Shortcut从用户触发到处理的整个过程

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        var performAdditionalHandling: Bool = true
        if let shortcutItem: UIApplicationShortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {//用户从shortcut打开应用,先保存shortcut信息,待后面处理
            launchedShortCutItem = shortcutItem
            
            performAdditionalHandling = false
        }
        
        if let shortcutItems = application.shortcutItems where shortcutItems.isEmpty {//若动态shortcut为空,则添加两个shortcutitem
            let shortcut1 = UIMutableApplicationShortcutItem(type: ShortcutIdentifier.Third.type, localizedTitle: "Third", localizedSubtitle: "The Third Item", icon: UIApplicationShortcutIcon(type: .Play), userInfo: nil)
            
            let shortcut2 = UIMutableApplicationShortcutItem(type: ShortcutIdentifier.Fourth.type, localizedTitle: "Fourth", localizedSubtitle: "The Fourth Item", icon: UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Pause), userInfo: nil)
            
            application.shortcutItems = [shortcut1, shortcut2]
        }
        
        return performAdditionalHandling
    }

        2.2 处理Shortcut

              处理Shortcut场景有两种,一种是App没有启动,另外一种就是App已启动,但是处于background状态

        2.2.1 未启动

             参见上面代码片段里面的,保存部分解释。在信息保存后,我们需要在App变成Active状态是处理,代码如下:

/*
      App未启动时,用户通过快捷键启动时,在application(_:didFinishLaunchingWithOptions)保存快捷键信息,此处处理,以免阻碍application(_:didFinishLaunchingWithOptions)执行效率
    */
    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        guard let shortcut = launchedShortCutItem else { return }
        handleShortcut(shortcut)
        
        launchedShortCutItem = nil
    }

       2.2.2 background状态

/*
      1、当用户从桌面选择一个快捷选项时,该方法会被调用,但是当application(_:,willFinishLaunchingWithOptions:) 或者 application(_:didFinishLaunchingWithOptions) 返回false,不会被调用
      2、当App已在后台运行时,用户使用快捷键会调用此方法
    */
    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
        let handledResult = handleShortcut(shortcutItem)
        
        completionHandler(handledResult)
    }

        至此,Shortcut的两种实现方式及其处理过程介绍完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值