2009-12-02 9 views
17

Utworzono zoomable UIScrollView i dodano do niego 100 subviews (kafelki). Widok przewija się doskonale w lewo i prawo. Chciałbym jednak zezwolić na powiększanie.Prawidłowe powiększenie UIScrollView zawierającego wiele subviews

Aby to zrobić czytałem, że moja delegat musi wdrożyć:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return ???; 
} 

Widziałem przykłady, które mają tylko jeden podrzędny, aby powiększyć, więc zwrotu, podrzędny w tej metodzie. W moim przypadku mam jednak znacznie więcej. Jaki jest właściwy sposób powiększania?

Próbowałem utworzyć kolejne UIView i dodać 100 podobieństw do tego. A następnie zwróć ten widok z powyższej metody, ale nie działa (jest powiększany, ale po zatrzymaniu nie jest już interaktywny).

+0

Czy próbowałeś powrocie sam UIScrollView? – fbrereto

+0

Tak, to była pierwsza rzecz, którą próbowałem. To też pomieszało ... – Dimitris

Odpowiedz

40

Dokładnie

To co Jabłko jest również wspomnieć w Scroll View Programming Guide:

Wystarczy utworzyć widok, dodać wszystkie subviews do tego widoku i dodać nowo utworzony widok jako jeden podrzędny do Scrollview. ..

Następnie w metodzie delegata viewForZoomingInScrollView zwróci obiekt o indeksie 0:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return [self.scrollView.subviews objectAtIndex:0]; 
} 
2

stworzyłem pogląd gdzie wszystko za pomocą dodanej:

UIView *zoomableView = [[UIView alloc] init]; 

bez określania jej ramkę.

Problem został rozwiązany, gdy po dodaniu do niego wszystkich podobrazów, ustawiłem ramkę na coś wystarczająco dużego, aby pomieścić wszystkie kafelkowe subviews.

+0

również mi pomógł - ustawiając rozmiar kadru widoku ojca na maksymalny rozmiar jego podobrazów (w moim przypadku był to rozmiar obrazu). – Yony

0

hav e, aby zwrócić to, co chcesz dodać widoki, aby przewinąć widok jako subviews.

Ex: Jeśli dodajesz widok obrazu, aby przewinąć widok następnie napisać

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
return imageView object; 
}