iOS 9 快速操作(3D 触控)
Posted
技术标签:
【中文标题】iOS 9 快速操作(3D 触控)【英文标题】:iOS 9 Quick Actions (3D Touch) 【发布时间】:2015-10-02 08:09:14 【问题描述】:我正在尝试理解为 ios 9 执行快速操作(3D 触摸)。
我希望用户选择 4 个过滤器中的 1 个应用到图像,所以如果我选择第 1 项,我会将 NSUserDefaults.standardUserDefaults() 设置为过滤器,然后使用应用的过滤器显示正确的图片。
在 AppDelete.swift 中:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void)
var filterType:Int
switch (shortcutItem.type)
...set filterType
NSUserDefaults.standardUserDefaults().setInteger(filterType, forKey:"filterType")
NSUserDefaults.standardUserDefaults().synchronize()
在 ViewController.swift 中:
override func viewDidLoad()
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"setDefaultFilter", name: UIApplicationWillEnterForegroundNotification, object:nil) // Handle enter from background
setDefaultFilter()
func setDefaultFilter()
filterType = defaults.integerForKey("filterType")
...
imageView.image = filterImage(defaultImage!, filter:filters[filterType])
但是,当从菜单进入应用程序时,它将始终显示最后一个选择(而不是当前选择)。如果我选择第 1 项,则什么也没有发生。我选择第 3 项,第 1 项就会出现。
我也尝试通过 appDelegate 传递参数,结果是一样的。我认为生命周期存在一些问题。
有什么想法吗?
【问题讨论】:
【参考方案1】:NSUserDefaults 将数据写入闪存,可能不会那么快。
你可以再等一会儿,比如观察UIApplicationDidBecomeActiveNotification
而不是UIApplicationWillEnterForegroundNotification
。
或者您可以使用其他方式传递参数,例如,作为AppDelegate
中的实例变量。
【讨论】:
UIApplicationDidBecomeActiveNotification 是什么诀窍!我也尝试过传递实例变量,但在我使用 UIApplicationDidBecomeActiveNotification 之前它不起作用。【参考方案2】:didFinishLaunchingWithOptions 方法总是在调用 performActionForShortcutItem 方法之前调用以响应快速操作。 因此,我认为您需要检查在 didFinishLaunchingWithOptions 方法中选择了哪种快速操作。如果应用程序不是从快速操作启动的,您只需继续正常的应用程序启动过程。(默认过滤器)
如果您决定在 didFinishLaunchingWithOptions 中处理快速操作,则必须在 didFinishLaunchingWithOptions 中返回 NO。
您可以从我的演示项目中获得更多想法:
https://github.com/dakeshi/3D_Touch_HomeQuickAction
【讨论】:
以上是关于iOS 9 快速操作(3D 触控)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 应用程序的 UIApplicationShortcutIcons(3D touch) 中添加 4 个以上的快速操作项