苹果在发布iPhone 6s时推出的新的手势操作,在今年的iPhone XR上居然被阉割,某种程度上也说明这个功能并没有那么受欢迎。一般使用最多的场景就是桌面上按压图标呼出快捷操作,这里我们来说一下怎么实现这个功能
实现方式有两种,静态文件设置和动态代码实现
1. 静态文件实现:
这个静态文件指的就是我们非常熟悉的Info.plist
文件了,我们通过在文件中添加相关属性实现功能

添加row
UIApplicationShortcutItems
,类型为Array
,然后需要几个快捷操作就添加几个item,类型为Dictionary
,item的属性有:
UIApplicationShortcutItemType 相当于item的id,我们用来识别触发的操作是哪个,必填
UIApplicationShortcutItemUserInfo信息
UIApplicationShortcutItemIconFile图标名称
UIApplicationShortcutItemIconType图标类型
UIApplicationShortcutItemTitle标题 必填
UIApplicationShortcutItemSubTitle副标题
userinfo
类型为Dictionary
,可以放一些点击回调的参数,其他的都为String
类型。
IconType
可以设置一些系统默认的图标,类如分享、邮件、拍照等等,你也可以用IconFile
来设置自己的图片文件来充当图标,图片必须是正方形、单色并且尺寸是35*35像素的图片。
2. 动态代码实现:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let item1 = UIApplicationShortcutItem.init(type: "item1", localizedTitle: "no.1", localizedSubtitle: nil, icon: UIApplicationShortcutIcon.init(type: .location) , userInfo: nil)
let item2 = UIApplicationShortcutItem.init(type: "item2", localizedTitle: "no.2", localizedSubtitle: nil, icon: UIApplicationShortcutIcon.init(type: .share) , userInfo: nil)
let item3 = UIApplicationShortcutItem.init(type: "item3", localizedTitle: "no.3", localizedSubtitle: nil, icon: UIApplicationShortcutIcon.init(type: .mail) , userInfo: nil)
application.shortcutItems = [item1, item2, item3]
return true
}
我们在application didFinishLaunchingWithOptions
方法里设置application.shortcutItems
,想要几个操作就初始化几个UIApplicationShortcutItem
,item的几个属性我们上面已经介绍过了,和设置文件时一样。
3. 点击快捷操作进入APP:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
if shortcutItem.type == "scan" {
//相应操作
}
}
我们在application performActionFor shortcutItem
方法里处理快捷操作的点击,根据shortcutItem.type
来判断对应的点击。
PS:自定义的shortcutItem最多为四个,设置超过四个也只显示前四个,关于默认的分享app那个,app上架后系统会自动添加的,我们调试的时候不会显示,不用自己来实现,所以加上自定义的四个,你看的app用力按最多显示5个快捷操作
image.png
像支付宝这种用力按压出来的效果,其实是widget
,是用Today Extension
实现的小组件,上面的“分享支付宝”才是系统自动添加的ShortcutItem,下次有时间我来说一下这个组件怎么实现,这里不用纠结,这就不是shortcutItem的效果。
欢迎更正错误和交流,回复评论和私信皆可 😊
网友评论