2015-12-05 13 views
6

Tôi muốn thêm lối tắt "Tiếp tục" vào trò chơi của mình. Nhưng khi người dùng hoàn thành trò chơi của tôi hoàn toàn, tôi muốn điều này bị xóa hoặc thay thế bằng một lối tắt khác. Điều này có thể không? Tôi biết 3d touch được xử lý bởi hệ thống ios, nhưng có thể vẫn còn một số tùy chọnios - Tự động chỉnh sửa danh sách phím tắt 3d touch

+0

đâu là tiếp tục shortcut đặt? Cũng bởi phím tắt tôi giả sử bạn có nghĩa là nút? – FredLoh

+0

Trò chơi của tôi dựa trên cấp độ. Vì vậy, phím tắt này là UIApplicationShortCut (xuất hiện trong menu ios chính) và có ý định khởi chạy mức độ sẵn có cuối cùng –

Trả lời

8

Có hai cách để tạo lối tắt - động và tĩnh.

  • Tĩnh được thêm vào plist và không bao giờ thay đổi.
  • Có thể thêm và xóa động trong mã.

Có vẻ như bạn muốn có một shortcut năng động, vì vậy đây là khoảng cách bạn sẽ làm điều đó:

Để thêm:

if #available(iOS 9.0, *) { 
    if (UIApplication.sharedApplication().shortcutItems?.filter({ $0.type == "com.app.myshortcut" }).first == nil) { 
     UIApplication.sharedApplication().shortcutItems?.append(UIMutableApplicationShortcutItem(type: "com.app.myshortcut", localizedTitle: "Shortcut Title")) 
    } 
} 

Để loại bỏ:

if #available(iOS 9.0, *) { 
    if let shortcutItem = UIApplication.sharedApplication().shortcutItems?.filter({ $0.type == "com.app.myshortcut" }).first { 
     let index = UIApplication.sharedApplication().shortcutItems?.indexOf(shortcutItem) 

     UIApplication.sharedApplication().shortcutItems?.removeAtIndex(index!) 
    } 
} 

Bạn có thể sau đó xử lý phím tắt bằng cách kiểm tra nó trong phương thức ủy nhiệm ứng dụng:

@available(iOS 9.0, *) 
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { 
    if shortcutItem.type == "com.app.myshortcut" { 
     // Do something 
    } 
} 

Đừng quên kiểm tra khả năng tương thích iOS9 và 3D Touch.

Bạn có thể tìm nhà phát triển của Apple 3d trang liên lạc ở đây:

https://developer.apple.com/ios/3d-touch/

Và các phím tắt đặc biệt năng động ở đây:

https://developer.apple.com/library/ios/samplecode/ApplicationShortcuts/Listings/ApplicationShortcuts_AppDelegate_swift.html#//apple_ref/doc/uid/TP40016545-ApplicationShortcuts_AppDelegate_swift-DontLinkElementID_3

+0

Vâng có vẻ như nó sẽ phù hợp với nhu cầu của tôi, phần buồn duy nhất về nó là bạn không thể đặt phím tắt động sau khi ứng dụng được cài đặt từ AppStore. Vì vậy, tôi đoán nó là ok rằng các phím tắt của tôi sẽ xuất hiện chỉ sau một thời gian trôi qua.Cảm ơn bạn đã trả lời, tôi sẽ thử một chút sau và nếu nó hoạt động, tôi sẽ đánh dấu nó là chính xác! –

+0

Tôi đồng ý, chúng tôi có một ví dụ điển hình với lối tắt đăng nhập. Nó sẽ được tốt đẹp để hiển thị đăng nhập từ điểm mà tại đó các ứng dụng được tải xuống và sau đó loại bỏ này khi người dùng đăng nhập. Sẽ được quan tâm để nghe nếu có một giải pháp nhưng chúng tôi đã không tìm thấy một được nêu ra. Dù sao, vui mừng nó đã giúp và cảm ơn cho các thông tin phản hồi –

+0

có ai đã thử mã này? nếu các mục tắt không phải là một mảng có thể thay đổi, thì làm cách nào để bạn xóa trực tiếp khỏi nó? bạn có nên tạo một mảng trống và đặt thay vào đó không? – skinsfan00atg

0

tôi giả sử bạn đang nói về cái gọi là nhanh Hành động mà người dùng có thể gọi bằng cách chạm vào biểu tượng ứng dụng của bạn trên màn hình chính của mình. Bạn có thể tự động tạo và cập nhật chúng ngay từ mã của bạn. Cách tốt nhất để tìm hiểu về tất cả các khả năng là nhìn vào số sample code của Apple.

0
[UIApplication sharedApplication].shortcutItems = @[]; 

làm việc cho tôi. câu trả lời khác cho thấy loại bỏ một cái gì đó từ mảng không hoạt động như shortcutItems không phải là mutable.

3

Đây là một lớp tiện dụng để kích hoạt các đoạn tắt của cảm ứng 3D tắt của biểu tượng ứng dụng của bạn. Tất nhiên bạn có thể kích hoạt bất kỳ hành động nào, nhưng điều này có lẽ là phổ biến nhất. Sau đó nó tự đồng bộ khi ứng dụng xuất hiện hoặc chuyển sang nền. Tôi đang sử dụng điều này để kích hoạt một phần "Dự án của tôi" chỉ sau khi người dùng đã tạo ra một (VisualizerProject.currentProject.images.count> 0).

class AppShortcut : UIMutableApplicationShortcutItem { 
    var segue:String 

    init(type:String, title:String, icon:String, segue:String) { 
     self.segue = segue 
     let translatedTitle = NSLocalizedString(title, comment:title) 
     let iconImage = UIApplicationShortcutIcon(templateImageName: icon) 
     super.init(type: type, localizedTitle:translatedTitle, localizedSubtitle:nil, icon:iconImage, userInfo:nil) 
    } 
} 

class AppShortcuts { 

    static var shortcuts:[AppShortcut] = [] 

    class func sync() { 

     var newShortcuts:[AppShortcut] = [] 

     //reverse order for display 
     newShortcuts.append(AppShortcut(type: "find-color", title: "Find Color", icon:"ic_settings_black_24px", segue: "showColorFinder")) 

     newShortcuts.append(AppShortcut(type: "samples", title: "Sample Rooms", icon:"ic_photo_black_24px", segue: "showSamples")) 

     //conditionally add an item like this: 
     if (VisualizerProject.currentProject.images.count > 0) { 
      newShortcuts.append(AppShortcut(type: "projects", title: "My Projects", icon:"ic_settings_black_24px", segue: "showProjects")) 
     } 

     newShortcuts.append(AppShortcut(type: "visualizer", title: "Paint Visualizer", icon:"ic_photo_camera_black_24px", segue: "showPainter")) 

     UIApplication.sharedApplication().shortcutItems = newShortcuts 
     shortcuts = newShortcuts 
    } 

    class func performShortcut(window:UIWindow, shortcut:UIApplicationShortcutItem) { 

     sync() 

     if let shortcutItem = shortcuts.filter({ $0.type == shortcut.type}).first { 

      if let rootNavigationViewController = window.rootViewController as? UINavigationController, 
       let landingViewController = rootNavigationViewController.viewControllers.first { 
       //Pop to root view controller so that approperiete segue can be performed 
       rootNavigationViewController.popToRootViewControllerAnimated(false) 

       landingViewController.performSegueWithIdentifier(shortcutItem.segue, sender: self) 
      } 
     } 
    } 
} 

Sau đó, trong đại biểu ứng dụng của bạn, thêm đồng bộ và thực hiện các phím tắt gọi

func applicationDidEnterBackground(application: UIApplication) { 
    AppShortcuts.sync() 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 

    AppShortcuts.sync() 
} 

@available(iOS 9.0, *) 
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { 

    if let window = self.window { 
     AppShortcuts.performShortcut(window, shortcut: shortcutItem) 
    } 
} 
Các vấn đề liên quan