2011-01-21 3 views
6

Sono un principiante quando si tratta di controllo della pagina, ed è per questo che non sono sicuro al 100% se il mio titolo è d'accordo con quello che voglio. Voglio fare un UIPageControl che quando l'utente fa scorrere lo schermo, la vista passerebbe ad un'altra vista e l'UIPageController nella parte inferiore dello schermo si aggiornerebbe automaticamente. Inoltre, per rendere la mia richiesta ancora più confusa, voglio una barra delle schede nella parte inferiore dello schermo che rimanga invariata al cambiare delle visualizzazioni.UIViews con UIPageControl

Un grande esempio di questo è del Iconfactory Ramp Champ: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

La barra in basso resta fermo, mentre il resto degli elementi sullo schermo si muove. Quale sarebbe il modo più semplice per farlo?

EDIT: So che devo usare un UISrollView, solo che non so come fare per la sua attuazione ...

risposta

22

Credo che quello che stai cercando è in realtà un UIScrollView con pagingEnabled impostato su SÌ. Puoi lasciare lo scrollview come una vista sopra una normale UITabBar. Userai un UIPageControl per ottenere i puntini. È possibile aggiornarlo a livello di codice quando UIScrollView scorre su una pagina implementando un metodo di delega appropriato della visualizzazione di scorrimento, forse -scrollViewDidScroll :.

Supponiamo di avere due ivars: scrollView e pageControl. Quando sai quante pagine avrà la tua vista di scorrimento, puoi impostare il contenuto Dimensione di scrollView. Dovrebbe essere un multiplo dei limiti di scrollView. Ad esempio, se il numero di pagine è statico è possibile hardcode nel vostro -viewDidLoad ...

- (void)viewDidLoad { 
    // Any other code. 

    scrollView.pagingEnabled = YES; 
    scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width * 3, scrollView.bounds.size.height); // 3 pages wide. 
    scrollView.delegate = self; 
} 

Poi, di aggiornare i puntini ...

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    CGFloat pageWidth = scrollView.bounds.size.width; 
    NSInteger pageNumber = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = pageNumber; 
} 
+0

Grazie, hai qualche tipo di codice sorgente su come farlo? (Non ne trovo nessuno) –

+0

@Andy B, Sì. Ho modificato la mia risposta con un approccio standard. –

+0

Mi sento davvero stupido in questo momento; non sta ancora dormendo. –

2

È necessario utilizzare un UIScrollView

Supponendo di avere un nome Ivar chiamato ScrollView

int amountOfFrames = 10; 
    scrollView.pagingEnabled = TRUE; 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * amountOfFrames, scrollView.frame.size.height); 
    scrollView.delegate = self; 

avrete quindi necessario implementare i metodi delegato necessarie, in modo da poter aggiornare il vostro controllo pagina

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    // Switch the indicator when more than 50% of the previous/next page is visible 
    CGFloat pageWidth = scrollView.frame.size.width; 
    int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = page; 
} 

È necessario inserire qualsiasi contenuto che si desidera essere scorrevole all'interno di queste ScrollView, idealmente lazyload in esso, se il contenuto si visualizza richiederà molta memoria heap, usa scrollviewDidScroll per rimuovere e aggiungere contenuto nelle posizioni richieste

+0

Grazie per l'aiuto, ma che didn ' t significa molto per me. Ho sviluppato per solo circa sette mesi. Hai qualche codice sorgente? –