簡體   English   中英

如何檢測UIWebView的縮放比例

[英]How to detect zoom scale of UIWebView

我希望在用戶放大時增加UIWebView高度(如iPhone中的默認郵件應用程序)。 因此,我嘗試使用下面的代碼在webview中查找scrollview並添加UIScrollViewDelegate以使用scrollViewDidZoom檢測縮放比例以增加此方法的webview高度。

// MessageAppDelegate.h
@interface MessageAppDelegate : NSObject <UIApplicationDelegate,UIWebViewDelegate,UIScrollViewDelegate> {   
    UIWebView *webview;
    UIScrollView *scrollview;
}


//MessageAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

    [self.window makeKeyAndVisible];

    webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 150, 320, 100)];
    webview.delegate = self;
    webview.scalesPageToFit = YES;
    webview.userInteractionEnabled = YES;

    [webview loadHTMLString:@"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=6.0 user-scalable=yes\">test test" baseURL:nil];

    [self.window addSubview:webview];

    // Find scrollview in webview
    for (UIView *view in webview.subviews) {
        if ([view isKindOfClass:[UIScrollView class]]) {
            // Get UIScrollView object
            scrollview = (UIScrollView *) view;
            scrollview.delegate = self;
        }
    }

    return YES;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
    NSLog(@"scale %f",scale);
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidZoom %f",scrollview.zoomScale);
}

問題是我無法在webview上放大/縮小,但是在scrollViewDisEndZooming方法上顯示了NSLog

比例1.0

當我結束縮放和scrollViewDidZoom方法沒有顯示任何東西。 我想檢測webview的縮放比例,以便在scrollViewDidZoom上計算其高度。

我做錯了什么? 請幫忙。

提前致謝。

我已經為你的代碼做得很好,做了以下修改:

你只需得到scrollview類點,然后就可以得到scrollview.contentSize.width,當你放大時可以改變,但scrollview.zoomScale總是保持1.so必須使用contensize.width來計算比例。

@interface dictViewController : UIViewController<UIWebViewDelegate,UITextFieldDelegate,UIGestureRecognizerDelegate,UIScrollViewDelegate>{

UIScrollView *scrollview;
......................

//scrollview.delegate = self;

for (UIView *view in webViewM.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
        // Get UIScrollView object
        scrollview = (UIScrollView *) view;
        //scrollview.delegate = self;
    }
}
/*
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
//NSLog(@"scale zooming %f",scale);
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
//NSLog(@"scrollViewDidZoom %f",scrollview.zoomScale);
}*/


- (void)swipeRightAction:(id)ignored
{  

 NSLog(@"wid=%f", scrollview.contentSize.width);
 NSLog(@"zoomscale=%f", scrollview.zoomScale);

}

我不認為有一種正確的方法可以從暴露的API中做到這一點,但是有一種hacky方式。

UIWebView包含一個UIScrollView ,可以為其提供委托。 然后當縮放更改時,您(委托)獲得一個名為scrollViewDidZoom:的回調scrollViewDidZoom:

為了找到滾動視圖,您可以從Web視圖中獲取subviews集合並迭代以查看哪個是isKindOfClass:[UIScrollView class]

現在, UIWebView也符合UIScrollViewDelegate 這可能意味着您正在改變Web視圖的實現,這可能是一個壞主意。 測試好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM