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

时间:2010-12-07 08:41:18

标签: iphone uiwebview uiscrollview

在我的基于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正常工作......

2 个答案:

答案 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文件的此问题仅在您使用捏合手势进行缩放时才适用。