Программно масштабировать UIWebView, обращаясь к его UIScrollView - PullRequest
2 голосов
/ 07 декабря 2010

в моем представлении на основе xib у меня есть UIWebView, который мне нужно программно масштабировать.

Поскольку UIWebView не имеет собственных методов масштабирования, я обнаружил в сообщении Макса post , в котором предлагалось получить UIWebViews UIScrollView и отправить уровни масштабирования этому.

В методе viewDidLoad контроллера моего представления я определил UIScrollView следующим образом:

- (void)viewDidLoad {
   // set iVars (both are IBOutlets)
   iWebView.delegate = self;
   iScrollView = [[iWebView subviews] objectAtIndex:0];

   iScrollview.minimumZoomScale = 0.2;
   iScrollview.maximumZoomScale = 4.0;
   iScrollview.zoomScale = iScrollview.minimumZoomScale;

NSLog(@"webViewDidFinishLoad: Current %.3f, Min %.3f, Max %.3f", 
          iMapScrollView.zoomScale, iMapScrollView.minimumZoomScale, iMapScrollView.maximumZoomScale);
   ...
}

UIWebView (по умолчанию) содержит png-файл 1000x2000px. NSLog показывает

webViewDidFinishLoad: Current 0.200, Min 0.200, Max 4.000

Проблема возникает , когда я пытаюсь обновить iScrollView.zoomLevel до нового коэффициента масштабирования (скажем, до 2,4):

- (void)setPositionWithZoom:(float)xPos down:(float)yPos zoomScale:(float)mZoomScale {
   iScrollView.zoomScale = mZoomScale;
   NSLog(@"setPositionWithZoom: mZoomScale %.3f Current %.3f, Min %.3f, Max %.3f", 
           mZoomScale , iMapScrollView.zoomScale, iMapScrollView.minimumZoomScale, iMapScrollView.maximumZoomScale);
   ...
}

NSLog показывает:

setPositionWithZoom: mZoomScale 2.400 mCurrent 1.000 Min 1.000 Max 1.000

Таким образом, уровень масштабирования сбрасывается до 1, поскольку минимальный / максимальный уровни масштабирования загадочным образом упали до этого значения.

Я ошеломлен, какие-нибудь подсказки?


EDIT: Дальнейшие исследования привели меня к методу касания, который я вызываю из подкласса UIWindow для пересылки событий касания (реализация рецепта Mithins для захвата событий касания с помощью UIWebViews).

Когда этот метод (myWebViewTouchesEnded) в моем viewController вызывается, значения стираются. Понятия не имею почему.

PATCH: Я применил простое исправление, чтобы определить 2 iVars, которые я использую для установки min / max zoomScales обратно на мои пользовательские значения в myWebViewTouchesEnded, и все работает ...

Ответы [ 2 ]

0 голосов
/ 02 марта 2014

Вы имели в виду iScrollView вместо iMapScrollView в своем заявлении NSLog?

Имейте в виду, что UIWebView делает нестабильные вещи с zoomScale ,imumZoomScale и MaximumZoomScale.

Например:

При загрузке файла с scalePageToFit: если файл PDF, min ... = 1 max ... = 32 и zoomScale = 1, при масштабировании zoomScale изменяется соответствующим образом, а min ... и max ... остаются неизменными.

если файл является файлом Excel, min ... = 1 max ... = некоторое число N и zoomScale = 1 При масштабировании zoomScale остается = 1, а max ... и min ... изменяются, например установите zoomScale = 2 и zoomScale будет = 1, min ... будет = 1/2 и max ... будет = N / 2

РЕДАКТИРОВАТЬ: Эта проблема с файлами Excel применяется только тогда, когда вы увеличили с жестом повышения.

0 голосов
/ 20 марта 2012

Попробуйте это:

for (UIScrollView *scroll in [myPDFView subviews])
{   
    //Set the zoom level.

    [scroll setZoomScale:2.5f animated:YES];
}
...