iOS 9快速操作(3D Touch)

时间:2015-10-02 08:09:14

标签: ios swift quickaction 3dtouch

我正在尝试了解iOS 9的快速操作(3D Touch)。

我希望用户选择4个过滤器中的1个应用于图像,所以如果我选择第1项,我会将NSUserDefaults.standardUserDefaults()设置为过滤器,然后使用应用过滤器显示正确的图片。 / p>

在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 个答案:

答案 0 :(得分:1)

NSUserDefaults在flash上​​写入数据,这可能不会那么快。

您可以再等一会儿,例如观察UIApplicationDidBecomeActiveNotification以外的UIApplicationWillEnterForegroundNotification

或者您可以使用其他方式传递参数,例如,作为AppDelegate中的实例变量。