2010-09-17 12 views
10

Guarda l'app App Store, su iPhone o iPad, in particolare il pezzo sullo schermo dei dettagli dell'app che mostra schermate. Il visualizzatore di schermate ti mostra lo screenshot che stai guardando e i bordi del successivo e precedente. Ho bisogno di implementare qualcosa di molto simile.Paging UIScrollView con sbirciare le pagine adiacenti

Come ho fatto è giusto per poveri: ho costruito un UIScrollView e abilitato il paging e disposto i miei contenuti. Ho reso la cornice delle stesse dimensioni di una pagina di contenuti, ma più piccola dello schermo. Quindi ho disabilitato clipToBounds, quindi tutto ciò che è fuori dal frame di ScrollView viene ancora disegnato. Ora posso VEDERE i bordi delle pagine adiacenti, ma sono al di fuori del ScrollView e quindi non possono ricevere i tocchi di scorrimento. L'app App Store ti consente di toccare tutta la larghezza di questa cosa, compresi i bordi delle pagine vicine.

Quindi come hanno fatto?

risposta

17

È necessario aggiungere una vista "dietro" alla vista di scorrimento che copre l'intera area in cui le pagine saranno visibili. Questa vista dovrebbe implementare -hitTest: withEvent :. Questo metodo verrà chiamato dal sistema operativo per determinare dove indirizzare un particolare evento di tocco. Tutto quello che dovete fare è restituire il vista di scorrimento per tutti i punti di vista all'interno di questo supporto:

- (UIView *) hitTest: (CGPoint) pt withEvent: (UIEvent *) event { 
    if (CGRectContainsPoint(self.bounds, pt)) return self.scrollView; 
    return [super hitTest: pt withEvent: event]; 
} 
+0

Non posso credere che sia così semplice! Ci vorrà un giorno o due prima che io possa provarlo (la scarsa pianificazione da parte del mio cliente, in effetti, costituisce un'emergenza da parte mia, si scopre), ma ti fornirò provvisoriamente l'assegno. Saluti! –

+0

Grazie mille per questa risposta, Ben! Questo funziona davvero alla grande. –

+3

Ho provato la soluzione anche qui sopra ma ho scoperto che gli oggetti stessi all'interno della vista di scorrimento non ricevono più eventi di tocco - solo la scrollview. È questo comportamento previsto? –

0

Non dimenticare di inoltrare i tocchi alle subviews ScrollView se si desidera che il contenuto di rimanere interattivo di fuori dei limiti.

Il seguente esempio è vero se si è inserito il contenuto della vista Scroll in un contenitore aggiuntivo. Se questo non è il caso, il ciclo sopra le sottoview e restituisce quello che viene colpito dal tuo tocco.

- (UIView*)hitTest:(CGPoint)pt withEvent:(UIEvent*)event 
{ 
    UIView *contentView = [self.subviews count] ? [self.subviews objectAtIndex:0] : nil; 
    return [contentView hitTest:pt withEvent:event]; 
} 
+1

Ho provato questo, ma il metodo più urlato di UIScrollView non viene mai chiamato. Come stai facendo la tua gerarchia di vista? – htafoya

1

Non ho un abbastanza alto rango a commentare le risposte di cui sopra, ma si può trovare un codice di tutorial e di esempio sul sito di Ray Wenderlich: How To Use UIScrollView to Scroll and Zoom Content

Questo codice non utilizzare le tecniche sopra elencate, in particolare la logica del test di successo.

Problemi correlati