2015-11-24 10 views
10

Utilizzando la funzionalità 3D Touch Peek e Pop, qual è il modo più efficace di imitare le funzionalità illustrate di seguito (per far scorrere il contenuto "sbirciato" lato a lato per eseguire un'azione)? Lo screenshot qui sotto proviene dall'app di posta nativa iOS.3D Touch Peek Scorri come Mail

Mail Swipe 3D Touch - Unread Mail Swipe 3D Touch - Trash

+1

Vale la pena ricordare che, a meno che Facebook non sia autorizzato a utilizzare API private, la loro app ti consente di scorrere gli album per vedere più immagini, quindi ci sono app in App Store con quella funzionalità. –

+2

@DougSmith È possibile reimplementare l'intera funzionalità UIKit 3D Touch, incluso questo. Facebook lo ha implementato utilizzando l'ascolto manuale del riconoscimento del gesto di forza. –

risposta

9

Aggiornamento

È possibile replicare questo effetto su iOS 10. C'è un nuovo set di API chiamato UIPreviewInteraction e UIPreviewInteractionDelegate che abilitano la presentazione personalizzata per le interazioni peek/pop. Consiglio vivamente di guardare A Peek at 3D Touch da WWDC di quest'anno.

risposta originale

Guardando il iOS Runtime Headers, c'è una classe chiamata UIPreviewPresentationController. Questo è il controller responsabile per sbirciate. Al suo interno, ci sono riferimenti a oggetti denominati leadingPreviewAction e trailingPreviewAction. Questi hanno proprietà corrispondenti che si occupano di vincoli e centri di bordo. A giudicare dall'uso dei termini che precedono e trailing (come in Layout automatico), questi possono corrispondere a elementi di azione sinistra/destra.

Questa è la speculazione, ma penso che queste classi private correlate (_UIPreviewQuickActionView) controllino il comportamento che stai cercando. Quelle non sono disponibili in questo momento.

Allo stesso modo, la documentazione per UIPreviewAction dice:

Un'azione anteprima, o sbirciare azione rapida, viene visualizzato sotto una sbirciatina quando un utente fa scorrere il peek verso l'alto. Un'azione rapida di sbirciatina seleziona in genere un link diretto alla tua app e ha un titolo, uno stile e un gestore.

+1

E per rispondere alla tua domanda "qual è il modo più efficace di imitare la capacità", finiresti per ricreare la funzionalità come ha detto @DougSmith. Vorrei iniziare qui (https://github.com/marmelroy/PeekPop) per idee su come farlo. –

+2

Attraverso la risposta, grazie! Le informazioni sulle intestazioni di iOS Runtime sono particolarmente interessanti, non le ho mai incontrate prima. Questo sicuramente aiuta tutto ha più senso @ Chris. – kbpontius

2

Per utilizzare Peek azioni rapidi, il tuo detailledViewControler (o quello che denominato esso) dovrebbe ignorare previewActionItems così:

lazy var previewActions: [UIPreviewActionItem] = { 
     func previewActionForTitle(title: String, style: UIPreviewActionStyle = .Default) -> UIPreviewAction { 
      return UIPreviewAction(title: title, style: style) { previewAction, viewController in 
       guard let detailViewController = viewController as? DetailViewController, 
          item = detailViewController.detailItemTitle else { return } 

       print("\(previewAction.title) triggered from `DetailViewController` for item: \(item)") 
      } 
     } 

     let action1 = previewActionForTitle("Default Action") 
     let action2 = previewActionForTitle("Destructive Action", style: .Destructive) 

     let subAction1 = previewActionForTitle("Sub Action 1") 
     let subAction2 = previewActionForTitle("Sub Action 2") 
     let groupedActions = UIPreviewActionGroup(title: "Sub Actions…", style: .Default, actions: [subAction1, subAction2]) 

     return [action1, action2, groupedActions] 
    }() 


override func previewActionItems() -> [UIPreviewActionItem] { 
    return previewActions 
} 

Potete trovare l'intero codice qui: https://developer.apple.com/library/ios/samplecode/ViewControllerPreviews/ViewControllerPreviewsUsingtheUIViewControllerpreviewingAPIs.zip

+0

Questo mi fa sicuramente orientare nella giusta direzione, ma il codice fornito nel collegamento non sembra essere in grado di scorrere da lato a lato una volta che 3D Touch viene utilizzato su una di quelle 3 file come l'app di posta elettronica può. Sto facendo qualcosa di sbagliato? – kbpontius

+1

Credo che non ci sia modo di ottenere quello che vuoi con l'API pubblica. Semplicemente perché le API pubbliche sono solo circa 2 o 3 metodi e non offre altre opzioni oltre a "UIPreviewActionItem' che hanno solo 3" stili ". Credo che Apple stia tenendo questo per sé ... – AncAinu

+0

Questo è quello di cui avevo paura. Sarebbe bello vedere più documentazione su questo. Se riesci a trovare informazioni concrete su di esso sarei felice di premiarti la generosità.Grazie per i tuoi pensieri finora. – kbpontius