2009-10-01 3 views
0

Прямо сейчас, когда я дважды нажмите на UIScrollView я запускаю этот код (из собственного примера кода от Apple):Как сделать масштабирование UIScrollView до размера UIImage?

#define ZOOM_STEP 1.5 
float newScale = [imageScrollView zoomScale] * ZOOM_STEP; 
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:tapPoint]; 
[imageScrollView zoomToRect:zoomRect animated:YES]; 

Однако я установить максимальное увеличение до 3, но я хотел бы выяснить, как сделать двойное нажатие масштабирования до 1px = 1px, под этим я подразумеваю, UIScrollView приближается к фактическому размеру UIImage внутри него. Но я не уверен, как рассчитать, насколько большой образ используется для масштабирования масштабирования?

ответ

1

Я отследил образец кода, из которого вы тянули. Это был проект TapToZoom в ScrollViewSuite, доступный по адресу http://developer.apple.com/iphone.

Я изменил линию, которая вычисляет newScale как отношение между размером рамки Scroll View и размером изображения Image View. Это дает эффект масштабирования, пока изображение не будет показано с разрешением 1: 1.

Примечание: Я также убедился, что UIImageView с именем imageView является переменной класса. В исходном образце кода он был объявлен локально в методе viewDidLoad :.

Опасность здесь заключается в том, что вид прокрутки и изображение имеют одинаковое соотношение х/у. Я сделал математику по ширине.

- (void)tapDetectingImageView:(TapDetectingImageView *)view gotDoubleTapAtPoint:(CGPoint)tapPoint { 
    // double tap zooms in on them image to a 1:1 resolution (based on width) 
    float newScale = imageView.image.size.width/imageScrollView.frame.size.width; 
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:tapPoint]; 
    [imageScrollView zoomToRect:zoomRect animated:YES]; 
} 
+0

Спасибо, Брэд! Это полностью. И как вы указываете, высота/высота будет такой же, как ширина/ширина. – runmad

Смежные вопросы