在我的基于xib的视图中,我有一个UIWebView,我需要以编程方式进行缩放。
由于UIWebView
没有自己的缩放方法,我发现Max的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(默认情况下)包含一个1000x2000px的png文件。 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,因为最小/最大缩放级别已神秘地回落到该值。
我大惊小怪,有什么线索吗?
编辑:进一步的调查让我得到了一个触摸方法,我从UIWindow-subclass调用它来转发触摸事件(Mithins recipe的实现,用于通过UIWebViews掌握触摸事件)。 / p>
当我的viewController中的这个方法(myWebViewTouchesEnded
)被调用时,值被清除掉了。我不知道为什么。
PATCH:我应用了一个简单的补丁来定义2个iVars,用于将最小/最大缩放尺度设置回myWebViewTouchesEnded
中的自定义值并且evrything正常工作......
答案 0 :(得分:0)
试试这个:
for (UIScrollView *scroll in [myPDFView subviews])
{
//Set the zoom level.
[scroll setZoomScale:2.5f animated:YES];
}
答案 1 :(得分:0)
您在NSLog语句中的意思是iScrollView而不是iMapScrollView吗?
请注意,UIWebView使用zoomScale,minimumZoomScale和maximumZoomScale执行各种操作。
例如:
使用scalesPageToFit加载文件时: 如果file是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并且最大...将= N / 2
编辑:Excel文件的此问题仅在您使用捏合手势进行缩放时才适用。