繁体   English   中英

通过寻址UIWebView来以编程方式缩放UIWebView

[英]Programmatically zoom a UIWebView by addressing its UIScrollView

在基于xib的视图中,我有一个UIWebView,我需要以编程方式进行缩放。

由于UIWebView没有自己的缩放方法,因此我找到了Max的文章 ,该文章建议获取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子类调用的触摸方法,以转发触摸事件(使用UIWebViews来实现用于捕获触摸事件的Mithins 配方的实现)。

正是在我的viewController中的此方法( myWebViewTouchesEnded )被调用时,这些值才被清除掉。 我不知道为什么。

补丁:我应用了一个简单的补丁来定义2个iVar,用于将最小/最大zoomScales设置回myWebViewTouchesEnded自定义值,并且可以工作...

您是在NSLog语句中表示iScrollView而不是iMapScrollView吗?

请注意,UIWebView确实使用zoomScale,minimumZoomScale和maximumZoomScale来处理事情。

例如:

使用scalesPageToFit加载文件时:如果文件是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,最小...将等于1/2,最大...将等于N / 2

编辑:Excel文件的此问题仅在用捏手势缩放时才适用。

尝试这个:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM