簡體   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