2010-10-06 17 views
6

Mam obrazu, który chcę załadować do widoku obrazu i ustawić minimumZoomScale, jak również zoomScale do aspectFill jak skali, obliczyć w następujący sposób:Obliczanie minimumZoomScale z UIScrollView

// configure the map image scroll view 
iImageSize = CGSizeMake(iImageView.bounds.size.width, iImageView.bounds.size.height); 
iScrollView.minimumZoomScale = iScrollView.bounds.size.height/iImageSize.height; 
iScrollView.maximumZoomScale = 2; 
iScrollView.zoomScale = iScrollView.minimumZoomScale; 
iScrollView.contentOffset = CGPointMake(0, 0); 
iScrollView.clipsToBounds = YES; 

Rozmiar iScrollView wynosi 450 x 320 pikseli, a format iImageSize to 1600 x 1960 pikseli.

Ręczne wykonywanie matematyki minimalZoomScale: 450/1960 = 0.22959184. System określa zamiast tego 0.234693885 (???).

Ale aby okno zmieściło się w przestrzeni 450 pikseli, obie liczby nie działają (!!!). Próbowałem ręcznie i okazało się, że 0.207 to odpowiednia liczba (przekładałaby się na wysokość obrazu 2174 PD lub na inną wysokość UIScrollView równą 406 pikseli).

Dla informacji: ekran UIScrollView jest 450 pikseli, a mianowicie 480px minus stan wysokość bar (10), minus wysokość UITabBar (20)

Wszelkie wskazówki na temat tego złego zachowania?

+0

jaką się spotkałem, że dobrze. Ustawię wartość minimalnaZoomScale na pewną wartość, która automatycznie dostosowuje się w pewnym momencie. Dopasowanie jest jednak mniej lub bardziej niezauważalne, po prostu zostawiłem je i dodałem po prostu ten wiersz scrollview.zoomScale = scrollview.minimumZoomScale; aby upewnić się, że wszystko jest zsynchronizowane. – Altealice

Odpowiedz

0

Do prostego powiększania/pomniejszania zazwyczaj używam poniższego kodu. minimumZoomScale = 1 ustawia początkowy zoom do bieżącego rozmiaru obrazu. Podałem maximumZoomScale = 10, które można obliczyć z rzeczywistego stosunku wielkości obrazu do rozmiaru ramki kontenera.

[scrollView addSubview: iImageView]; 
    scrollView.contentSize = iImageView.frame.size; 
    scrollView.minimumZoomScale = 1.0; 
    scrollView.maximumZoomScale = 10; 
    [iImageView setFrame:CGRectMake(0, 0, 450, 320)]; 
[scrollView scrollRectToVisible:iImageView.frame animated:YES]; 
0

Nie jestem pewien, czy nadal masz ten problem, ale dla mnie skala jest dokładnie odwrotna. minimumZoomScale = 1 dla mnie i muszę obliczyć maximumZoomScale.

Oto kod:

[self.imageView setImage:image]; 
// Makes the content size the same size as the imageView size. 
// Since the image size and the scroll view size should be the same, the scroll view shouldn't scroll, only bounce. 
self.scrollView.contentSize = self.imageView.frame.size; 

// despite what tutorials say, the scale actually goes from one (image sized to fit screen) to max (image at actual resolution) 
CGRect scrollViewFrame = self.scrollView.frame; 
CGFloat minScale = 1; 
// max is calculated by finding the max ratio factor of the image size to the scroll view size (which will change based on the device) 
CGFloat scaleWidth = image.size.width/scrollViewFrame.size.width; 
CGFloat scaleHeight = image.size.height/scrollViewFrame.size.height; 
self.scrollView.maximumZoomScale = MAX(scaleWidth, scaleHeight); 
self.scrollView.minimumZoomScale = minScale; 
// ensure we are zoomed out fully 
self.scrollView.zoomScale = minScale;