32

現在、3D Touch を使用して iOS 9 アプリのホーム画面のクイック アクションを実装しています。定義された UIApplicationShortcutIconType 列挙型から既存のシステム アイコンを使用していくつかのアクションがあります。

例:

<dict>
    <key>UIApplicationShortcutItemIconType</key>
    <string>UIApplicationShortcutIconTypeSearch</string>
    <key>UIApplicationShortcutItemTitle</key>
    <string>Search for Parking</string>
    <key>UIApplicationShortcutItemType</key>
    <string>SEARCH</string>
</dict>

ただし、アクションの 1 つで、カスタム アイコンを使用したいと考えています。UIApplicationShortcutItemIconType 文字列をイメージ アセットの名前に置き換えようとしましたが、うまくいきません。

UIApplicationShortcutIcon.iconWithTemplateImageName() を使用して動的アクションを実行するのは簡単ですが、このアクションは静的である必要があります。

4

2 に答える 2

43

UIApplicationShortcutItemIconType キーを使用する代わりに、UIApplicationShortcutItemIconFile キーに置き換えてから、画像ファイルまたは ImageAsset の名前を指定します。

このような:

<dict>
    <key>UIApplicationShortcutItemIconFile</key>
    <string>MyCustomImageName</string>
</dict>

残りのキーはそのまま使用できます。

于 2015-09-13T20:51:42.300 に答える
25

UIApplicationShortcutItemIconFile をキーとして使用し、画像ファイルの名前 (ファイル拡張子の有無にかかわらず) を文字列として使用します。例: 「lightning.png」という名前の画像を使用すると、Info.plist に以下を追加します...

<key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconFile</key>
        <string>lightning</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Search for Parking</string>
        <key>UIApplicationShortcutItemType</key>
        <string>SEARCH</string>
    </dict>
</array>

画像は、プロジェクト ツリーまたは Assets.xcassets に保存できます。画像を A​​ssets.xcassets に保存する場合、セットにファイル名とは異なる名前を付ける場合は、画像セット名を使用します。

画像ファイルは PNG (透明度が必要な場合)、正方形、単色、35x35 ピクセルである必要があります。マルチカラー画像は基本的に黒のオーバーレイになります。

上記の基準を満たすテスト画像は次のとおりです。

背景が透明な lightning.png 35x35px

この画像を「lightning.png」として保存し、プロジェクト ツリーにドラッグして、Info.plist ファイルで上記のコードを使用するだけです。

Info.plist をソース コードとして編集することに慣れていない方のために、プロパティ リストでネイティブに編集した場合の上記の外観を次に示します。

Info.plist

これらのショートカットをコードに添付するには、AppDelegate.swift で行います。以下を追加します。

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {

    if shortcutItem.type == "SEARCH" {
        print("Shortcut item tapped: SEARCH")
        // go to SEARCH view controller
    }

}

UIApplicationShortcutItemType の規則はすべて大文字 (例: "SEARCH") ではなく、バンドル識別子をプレフィックスとして使用することに注意してください。

com.myapps.shortcut-demo.search
于 2015-10-15T04:01:10.157 に答える