2015-09-13 8 views
25

Ich implementiere zur Zeit Startbildschirm-Schnellaktionen für meine iOS 9 App mit 3D Touch. Ich habe mehrere Aktionen mit den vorhandenen System-Symbolen aus der definierten UIApplicationShortcutIconType-Enumeration.Wie lege ich ein benutzerdefiniertes Symbol für ein statisches UIApplicationShortcutItem in meiner iOS 9 App fest?

Ein Beispiel:

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

jedoch für eine der Aktionen möchte ich ein benutzerdefiniertes Symbol verwenden. Ich habe versucht, die UIApplicationShortcutItemIconType-Zeichenfolge durch den Namen meines Bildassets zu ersetzen, aber das funktioniert nicht.

Es ist einfach genug für dynamische Aktionen zu tun UIApplicationShortcutIcon.iconWithTemplateImageName() verwendet, aber diese Aktion muss statisch sein.

Antwort

33

Ersetzen Sie den UIApplicationShortcutItemIconType-Schlüssel durch den Schlüssel UIApplicationShortcutItemIconFile und geben Sie dann den Namen Ihrer Bilddatei oder ImageAsset an.

So:

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

Der Rest der Tasten kann bleiben, wie sie waren.

+0

I haven Ich konnte das nicht zur Arbeit bringen. Hast du ein Beispiel für ein Arbeitsbild? Muss das Bild eine bestimmte Größe haben? Welchen Dateinamen '' verwenden Sie? – pkamb

+5

Von https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html "Symbole sollten quadratisch, einfarbig und 35x35 Punkte sein, wie in diesen Vorlagendateien gezeigt und wie in den Richtlinien für menschliche Benutzerschnittstellen beschrieben." –

+2

Beachten Sie, dass 70x70 auch funktioniert und auf Retina-Displays viel besser aussieht. –

19

Verwenden UIApplicationShortcutItemIconFile als Schlüssel und den Namen Ihrer Bilddatei (mit oder ohne Dateierweiterung) als String. Zum Beispiel: ein Bild namens „lightning.png“ verwenden würden Sie folgende 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> 

Das Bild hinzufügen gespeichert entweder in Ihrem Projektbaum oder in Assets.xcassets werden kann. Wenn Sie das Bild in Assets.xcassets speichern, verwenden Sie den Namen des Bildsatzes, wenn Sie den Namen etwas anders als Ihren Dateinamen festlegen.

Ihre Bilddatei muss ein PNG sein (wenn Sie wollen Transparenz), quadratisch, einfarbige und 35x35 Pixel. Mehrfarbige Bilder erhalten im Wesentlichen ein schwarzes Overlay.

Hier ist ein Testbild, das die obigen Kriterien erfüllt:

lightning.png with transparent background 35x35px

Speichern Sie einfach das Bild als „lightning.png“, ziehen Sie es in Ihrem Projektbaum, und verwenden Sie den Code in Ihre Info. Plist-Datei.

Für Code diejenigen, die nicht komfortable Bearbeitung der Info.plist als Quelle, hier ist, wie die oben aussehen sollte, wenn man es nativ in der Eigenschaftenliste tun:

Info.plist

diese Verknüpfungen, um Code zu befestigen, Sie tun Sie dies in der AppDelegate.swift. Fügen Sie die folgenden:

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

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

} 

Es ist erwähnenswert, dass die Konvention für UIApplicationShortcutItemType nicht alle Kappen (zB "SEARCH"), sondern mit Ihrem Bundle-Bezeichner als Pre-fix:

com.myapps.shortcut-demo.search 
+0

Eigentlich ist die richtige Größe '104 × 104' für' @ 3x' und '70x70' für' @ 2x' Bilder. –

+1

Die richtige Größe ist '35pt' =' 105x105 @ 3x' und '70x70 @ 2x' –

Verwandte Themen