2016-04-06 5 views
0

Ich möchte 3D-Touch-Startbildschirm-Verknüpfungen zu meiner objektiven c-App hinzufügen. Der Hauptteil meiner App funktioniert, wenn eine UIB-Taste gedrückt wird. Dies ruft die Methode in der ViewController.h und ViewController.mIBAction im App-Delegierten anrufen

- (IBAction)StartScanning:(id)sender; 

diese die Kamera funktioniert starten können und schiebt die korrekte Sicht-Controller und dem gewünschten Verfahren.

Ich habe viele Komplettlösungen gelesen, kann aber immer noch nicht verstehen, wie ich diese IBAction starten soll, wenn eine 3D-Tastenkombination gedrückt wird.

Tut mir leid, wenn das eine Frage ist, oder ich bin nur dumm. Ich bin ein bisschen neu in all dem.

Antwort

0

Es ist nicht so schwer zu tun und wie du erwähnt hast, gibt es viele Tutorials da draußen, um zu helfen. Zusammenfassend müssen Sie zuerst den 3D-Touch-Delegaten zu Ihrem ViewController.h oder .m hinzufügen. <UIViewControllerPreviewingDelegate>

Damit haben Sie Zugriff auf die Delegate-Methoden, die Sie zum Anzeigen der Verknüpfungen auf dem Startbildschirm benötigen. Hier ist ein Beispiel für eine meiner Apps (Name in diesem Beispiel entfernt).

In meinem AppDelegate, performActionForShortcutItem:completionHandler: wird zuerst aufgerufen und die Verknüpfung der Benutzer ausgewählt. Verwenden Sie es, um zu bestimmen, wie auf die Verknüpfung reagiert werden soll. Ich übergab die Verknüpfung zu einer Methode, handleShortcutItem:shortcutItem", die bestimmen würde, welches Storyboard ich verwenden würde (Ich weiß, dass es keine 3D-Touch in iPads im Moment gibt, aber ich wollte den Code für erstellen, wenn Apple mit einem herauskommt).

Basierend auf der Verknüpfung, ich meine ViewController erstellen und übergeben Sie die Verknüpfung zu der Methode logShortcutUsed, übergibt die Verknüpfung Titel.

#pragma mark - Shortcut Items 

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler { 
completionHandler([self handleShortcutItem:shortcutItem]); 
} 

- (BOOL)handleShortcutItem:(UIApplicationShortcutItem *)shortcutItem { 
UIStoryboard *storyboard; 
UINavigationController *navController = (UINavigationController *) self.window.rootViewController; 
if (IS_IPAD()) { 
    storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil]; 
} else { 
    storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
} 

xxxViewController *vb = (xxxViewController *)navController.topViewController; 

if ([shortcutItem.localizedTitle isEqualToString:@"New Match"]) { 
    [vb logShortcutUsed:shortcutItem.localizedTitle]; 
    [vb startNewMatch]; 
    return TRUE; 

} else if ([shortcutItem.localizedTitle isEqualToString:@"New Game"]) { 
    [vb logShortcutUsed:shortcutItem.localizedTitle]; 
    [vb gamePressedFromShortcut]; 
    return TRUE; 

} 

return FALSE; 
} 

In meinem Haupt Viewcontroller, erstelle ich die dynamischen Verknüpfungen (Sie statische oder dynamische Verknüpfungen haben kann). Dies wird vom Benutzer beim 3D-Berühren des Symbols angezeigt. Ich füge auch ein Symbol hinzu, das ist optional. Die shortcutItems ist nur eine Anordnung von UIApplicationShortcutItem s.

- (void)setupDynamicShortcuts { 
UIApplicationShortcutItem *newMatch = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewMatch" 
                     localizedTitle:NSLocalizedString(@"New Match", @"Start a new match") 
                    localizedSubtitle:NSLocalizedString(@"Start a new match", @"Start a new match button.") 
                       icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"Sport Net-50"] 
                      userInfo:nil]; 

UIApplicationShortcutItem *newGame = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewGame" 
                     localizedTitle:NSLocalizedString(@"New Game", @"Start a new game") 
                    localizedSubtitle:NSLocalizedString(@"Start a new game", @"Start a new game button.") 
                       icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"volleyball-50"] 
                      userInfo:nil]; 

[UIApplication sharedApplication].shortcutItems = @[newMatch, newGame]; 

} 

Im gleichen Viewcontroller sind die Methoden, die aus dem AppDelegate, startNewMatch und gamePressedFromShortcut genannt wird. Ich protokolliere diese Aufrufe auch für meine Analysen, damit ich nachvollziehen kann, wie oft Nutzer diese Funktion verwenden, was ich sehr empfehlen kann.

Es ist nicht so schwierig, wie es zunächst scheint.

+0

Danke dafür. Ich folgte, fügte jedoch die Shortcut-Informationen im PLIST hinzu, da sie nicht mit dem obigen Code angezeigt wurden. Aber es scheint jetzt zu funktionieren, danke. – user5394344