Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active April 23, 2016 00:57
Show Gist options
  • Save KentarouKanno/c47dc634a8904c7af235f59492bbdb18 to your computer and use it in GitHub Desktop.
Save KentarouKanno/c47dc634a8904c7af235f59492bbdb18 to your computer and use it in GitHub Desktop.
3D Touch - QuickAction

3D Touch - QuickAction

// AppDelegate

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
       
        return true
    }

    
    @available(iOS 9.0, *)
    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
        // QuickAciton起動時
        QuickActionManager.sharedInstance.callQuickAction(shortcutItem)
    }
}

// ViewController (QuickActionを設定する場所にメソッドを入れる)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        if #available(iOS 9.0, *) {
            QuickActionManager.sharedInstance.setQuickAction()
        }
    }
}


// QuickActionManager

import Foundation
import UIKit

@available(iOS 9.0, *)
class QuickActionManager: NSObject {
    
    typealias QuickActionFormat = (type: String,
        localizedTitle: String,
        localizedSubtitle: String?,
        icon: UIApplicationShortcutIcon?,
        userInfo: [NSObject : AnyObject]?)
    
    
    lazy var shortcut1: UIMutableApplicationShortcutItem = {
        return UIMutableApplicationShortcutItem(type: QuickActionType.Search.rawValue,
                                                localizedTitle: QuickActionType.Search.rawValue,
                                                localizedSubtitle: nil,
                                                icon: UIApplicationShortcutIcon(type: .Search),
                                                userInfo:["value1":"key1"])
    }()
    
    lazy var shortcut2: UIMutableApplicationShortcutItem = {
        return UIMutableApplicationShortcutItem(type: QuickActionType.Location.rawValue,
                                                localizedTitle: QuickActionType.Location.rawValue,
                                                localizedSubtitle: nil,
                                                icon: UIApplicationShortcutIcon(type: .Location),
                                                userInfo:["value2":"key2"])
    }()
    
    lazy var shortcut3: UIMutableApplicationShortcutItem = {
        return UIMutableApplicationShortcutItem(type: QuickActionType.Share.rawValue,
                                                localizedTitle: QuickActionType.Share.rawValue,
                                                localizedSubtitle: nil,
                                                icon: UIApplicationShortcutIcon(type: .Share),
                                                // icon: UIApplicationShortcutIcon(templateImageName: "imageName") // 画像を指定する場合
                                                userInfo:["value3":"key3"])
    }()
    
    
    enum QuickActionType: String {
        case Search   = "Search"
        case Location = "Location"
        case Share    = "Share"
    }
    
    static let sharedInstance: QuickActionManager = {
        let instance = QuickActionManager()
        return instance
    }()


    func setQuickAction() {
        var items: [UIMutableApplicationShortcutItem] = []
        // 条件により動的にQuickActionを追加
        if true {
            items.append(shortcut1)
        }
        if true {
            items.append(shortcut2)
        }
        if true {
            items.append(shortcut3)
        }
        
        if !items.isEmpty {
            UIApplication.sharedApplication().shortcutItems = items
        }
    }

    
    func callQuickAction(item: UIApplicationShortcutItem) {
        
        switch item.type {
        case QuickActionType.Search.rawValue:   print("Select Search!")
        case QuickActionType.Location.rawValue: print("Select Location!")
        case QuickActionType.Share.rawValue:    print("Select Share!")
        default: break
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment