2011-01-21 12 views
6

Jestem początkującym, jeśli chodzi o kontrolę strony, i dlatego nie jestem pewien 100%, jeśli mój tytuł zgadza się z tym, co chcę. Chcę ustawić UIPageControl, że gdy użytkownik przeciągnie ekran, widok przełączy się na inny widok, a UIPageController u dołu ekranu zaktualizuje się. Ponadto, aby moja prośba była jeszcze bardziej zagmatwana, chcę umieścić pasek kart u dołu ekranu, który pozostanie ustawiony w miarę zmiany widoków.UIViews z UIPageControl

Doskonałym przykładem tego jest Iconfactory za Ramp Champ: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

Pasek na dole pozostaje umieścić natomiast reszta elementów na ekranie ruchów. Jaki byłby najłatwiejszy sposób na zrobienie tego?

EDIT: wiem, że muszę użyć UISrollView, ja po prostu nie wiem, jak go o jego realizacji ...

Odpowiedz

22

Wierzę, czego szukasz jest rzeczywiście UIScrollView z pagingEnabled ustawiony TAK. Możesz pozostawić widok przewijania jako widok powyżej zwykłego paska UITabBar. Użyjesz UIPageControl, aby uzyskać małe kropki. Można go aktualizować programowo, gdy UIScrollView przewija do strony, wprowadzając odpowiednią metodę delegowania widoku przewijania, może -scrollViewDidScroll :.

Załóżmy, że masz dwa ivars: scrollView i pageControl. Kiedy wiesz, ile stron ma widok przewijania, możesz ustawić rozmiar treści scrollView. Powinien to być wielokrotność granic scrollView. Na przykład, jeżeli liczba stron jest statyczny można zakodować go w -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; 
} 

Następnie, aby zaktualizować swoje małe kropki ...

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

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

Dzięki, czy masz jakiś kod źródłowy, jak to zrobić? (Nie mogę znaleźć) –

+0

@Andy B, Yes. Poprawiłem moją odpowiedź standardowym podejściem. –

+0

Czuję się teraz naprawdę głupio; wciąż nie działa. –

2

Musisz użyć UIScrollView

Zakładając masz nazwie ivar nazwie Scrollview

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

będziesz Następnie należy wdrożyć wymaganych metod delegata, tak aby można było zaktualizować kontrola strona

- (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; 
} 

Trzeba umieścić cokolwiek zawartość chcesz być przewijane wewnątrz tych Scrollview, idealnie LazyLoad do niego, jeśli zawartość będzie wyświetlanie będzie wymagać dużej ilości pamięci sterty, użyj scrollviewDidScroll, aby usunąć i dodać zawartość na wymaganych pozycjach.

+0

Dzięki za pomoc, ale to nie " dużo dla mnie znaczy. Pracuję już od około siedmiu miesięcy. Czy masz jakiś kod źródłowy? –

Powiązane problemy