в моем представлении на основе 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
, и все работает ...