Domanda

Come potrei fare per attuare trascinando un UIView dal UIPopoverController nella UIView posteriore.

Questa è la funzionalità che forniscono pagine nei loro mezzi di inserimento Popover, in cui è possibile trascinare una forma fuori dal UIPopoverController e rilasciarlo nel documento principale.

Sono in realtà confuso con il UIGestureRecognizers padella e dove saranno attuate.

Grazie,

Umer

È stato utile?

Soluzione

Hai a che fare con due controller di vista uno che è in background denominata MainController uno che ha presentato con un UIPopoverViewController chiamato popoverController. Il tuo popoverController potrebbe aggiungere un UIPanGestureRecognizer alle viste, che l'utente può trascinare. L'obiettivo azione del gestureRecognizer potrebbe essere un metodo sul popoverController.

Una volta che l'utente avvia un'operazione trascinando il metodo di azione è chiamata con il gestureRecognizer come argomento, erano lo stato del gestureRecognizer è UIGestureRecognizerStateBegan. Si potrebbe di salvare il fotogramma corrente del sedere altrove al fine di essere in grado di animare indietro, quando la caduta non riesce. Potrebbe essere necessario spostare la vista ad un altro superview (la finestra per esempio), perché io non sono sicuro se UIPopoverViewController clipsToBounds suo punto di vista.

In quanto draggs utente, il metodo di azione è chiamata più e più volte con il gestureRecognizer nel UIGestureRecognizerStateChanged Stato. Utilizzare il metodo translationInView: su UIPanGestureRecognizer per determinare quanto l'utente ha trascinato e aggiornare la vista trascinato centro / telaio / trasformare conseguenza.

Una volta che l'utente solleva il dito il metodo azione è chiamata per l'ultima volta con il set gestureRecoginzers stato a UIGestureRecognizerStateEnded. Ora è il momento di scoprire se la resistenza ha avuto successo. Ad esempio, il popoverController potrebbe chiedere al MainController tramite delega se c'è una destinazione di rilascio sotto la posizione attuale di vista, in caso affermativo il MainController può intervenire, altrimenti il ??popoverController avrebbe animare la trascinati vista posteriore di stati proviene, e aggiungerlo indietro come un visualizzazione secondaria per la sua vista.

Spero che questo è in qualche modo comprensibile e utile.

Altri suggerimenti

Secondo la documentazione sul UIPopoverController, quando il popover è presentato, si è presentato su una "finestra" speciale. A causa di questo, semplicemente aggiungendo una visualizzazione secondaria al contenuto controllore guarda la vista del controllore popover non è sufficiente per essere in grado di trascinare una vista esterna di vista del controllore vista popover.

La soluzione più semplice è quello di creare il proprio finestra, aggiungere il drag-view in grado di finestra durante il trascinamento si verifica. Rendere la finestra visibile per tutta la durata del drag / drop, e quindi rilasciare il finestra quando completa.

Come accennato in precedenza, di riconoscimento dei gesti (GR) sono più adatti per la funzionalità drag / Drop. Una volta che lo stato del GR è cambiato in "Inizia" GR controllerà tutte tocchi fino alla "Ended" o "annullata" stato viene raggiunto che lo rende ideale per il trascinamento vista tra controller di vista così come le finestre:)

Esempio:

@interface MySplitViewController : UISplitViewController {

    UIView *dragView;
    UIWindow *dragWindow;
}

Implementazione: NOTE non abbiamo bisogno di chiamare "makeKeyAndVisible" sulla nostra finestra. Abbiamo solo bisogno di impostare il suo "nascosto" la proprietà

da parte di Apple per quanto riguarda il metodo di makeKeyAndVisible: // convenienza. maggior parte delle applicazioni chiamano questo per mostrare la finestra principale e rendono anche chiave. proprietà altrimenti uso vista nascosta

-(void)dragBegan{

    self.dragWindow = [[UIWindow alloc] initWithFrame:self.view.window.frame];
    [self.dragWindow addSubview:self.dragView];
    [self.dragWindow setHidden:NO];
}

Qui gestire il gesto dello stato del Riconoscimento "Ended" o "Annullato". Nota :. E 'importante rimuovere la finestra quando Drag / Drop è completa o si perde interattività dell'utente con i punti di vista sotto

-(void)dragEnded{

    [self.dragView removeFromSuperview];

    [self.dragWindow setHidden:YES];
    [self.dragWindow release];

    [self.view addSubview:self.dragView];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top