#给app添加3DTouch,quickAction quickAction即重按app的启动按钮,弹出的快捷启动方式 通常分为两种, Static QuickAction和 Dynamic QuickAction,一般都只会用到Static QuickAction。 区别:
- Static是写在info.list中,Dynamic是过代码动态生成的。
- 因为Dynamic是代码动态生成的,所以app运行前是没有Dynamic QuickAction的。
- Static的优先级是高于Dynamic的,而且QuickAction数量限制是4个,所以你如果添加了三个Static QuickAction,那就只能添加一个�Dynamic QuickAction。
##如何添加静态的quickAction
打开info.list编辑成如下。
源码为
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemIconFile</key>
<string>search-icon</string>
<key>UIApplicationShortcutItemType</key>
<string>Search</string>
<key>UIApplicationShortcutItemTitle</key>
<string>查找</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string></string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict/>
</dict>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeAdd</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string></string>
<key>UIApplicationShortcutItemTitle</key>
<string>添加</string>
<key>UIApplicationShortcutItemType</key>
<string>New</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>password</key>
<string>123456</string>
<key>username</key>
<string>username</string>
</dict>
</dict>
</array>
安装测试,即可看到如图的效果,注意我这里用了一张search-icon的图片,你本地要是没有就会导致查找的icon为空。
下面对这些选项做一下介绍
- UIApplicationShortcutItemIconType: 非必需选项,使用系统自带的icon,比如如:UIApplicationShortcutIconTypeSearch,UIApplicationShortcutIconTypeAdd
- UIApplicationShortcutItemIconFile: 非必需选项,使用自定义的icon,值为Images.xcassets中的图片文件名
- UIApplicationShortcutItemTitle: 必填,这个不用多说,即为标题
- UIApplicationShortcutItemSubtitle: 非必需选项,副标题
- UIApplicationShortcutItemType: 必填,用于区分不同的action,进入app后,根据它做不同的操作
- UIApplicationShortcutItemUserInfo: 非必需选项,用来加入传入的参数,
处理QuickAction
在AppDelegate中有一代理方法
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
//这里即为处理action的地点
//完成后调用completionHandler方法,我这里自定义一个handleAction方法,返回值为是否处理成功。
completionHandler(hanleAction(shortcutItem))
}
通过定义一个enum非常简单的实现handleAction方法
enum ShortCut: String{
case New, Search
}
private func handleAction(shortcutItem: UIApplicationShortcutItem) -> Bool{
var result = false
let type = shortcutItem.type
if let shortCut = ShortCut.init(rawValue: type){
switch shortCut{
case .New:
print("call new")
result = true
case .Search:
print("call search")
result = true
}
}
return result
}
除了这种处理方式,还可以这样通过application(didFinishLaunchingWithOptions:)做处理 但是这种方式只会在第一次启动时执行,而且当两种方式同时存在的时候就会和上面的处理方式重复,因为这一种处理方式会在上一种之前执行,所以当你在这里处理完quickAction后return false,这样就不会重复第一种执行方式了。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
handleAction(shortcutItem)
return false
}
return true
}
##添加动态的quickAction 添加Dynamic quickAction特别简单,代码几行就可以完成了
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let shortCutItem1 = UIApplicationShortcutItem(type: "test3", localizedTitle: "dynamic 1", localizedSubtitle: "", icon: UIApplicationShortcutIcon(templateImageName: "qr"), userInfo: nil)
let shortCutItem2 = UIApplicationShortcutItem(type: "test4", localizedTitle: "dynamic 2", localizedSubtitle: "", icon: UIApplicationShortcutIcon(templateImageName: "qr"), userInfo: nil)
application.shortcutItems = [shortCutItem1, shortCutItem2]
return true
}
参数和static一样,效果图如下:
看添加3Dtouch的quickAction还是挺简单的。