【问题标题】:How to detect zoom scale of UIWebView如何检测 UIWebView 的缩放比例
【发布时间】:2011-07-23 21:55:02
【问题描述】:

我想在用户放大时增加UIWebView 的高度(如 iPhone 中的默认邮件应用程序)。 因此,我尝试使用下面的代码在 webview 中查找滚动视图并添加 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);
}

问题是我无法放大/缩小网页视图 但是NSLog 上的scrollViewDisEndZooming 方法显示

缩放 1.0

当我结束缩放时 而scrollViewDidZoom 方法没有显示任何内容。 我想检测 webview 的缩放比例以计算其在scrollViewDidZoom 上的高度。

我做错了什么? 请帮忙。

提前致谢。

【问题讨论】:

    标签: iphone uiwebview uiscrollview zooming


    【解决方案1】:

    你的代码我做得很好,做以下修改:

    你只需要得到scrollview类点,然后就可以得到scrollview.contentSize.width,当你缩小时可以改变,但是scrollview.zoomScale始终保持为1.所以必须使用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);
    
    }
    

    【讨论】:

      【解决方案2】:

      我认为从公开的 API 中没有合适的方法来做到这一点,但有一种 hacky 方法。

      UIWebView 包含一个UIScrollView,它可以被赋予一个委托。然后当缩放改变时,你(代理)会得到一个名为scrollViewDidZoom:的回调。

      为了找到滚动视图,可以从web视图中获取subviews集合,然后迭代看看是哪一个isKindOfClass:[UIScrollView class]

      现在,UIWebView 也符合 UIScrollViewDelegate。所以这可能意味着您正在更改 Web 视图的实现,这可能是一个坏主意。好好测试一下。

      【讨论】:

      • 感谢您的回答。我想在 iPhone 中实现与默认邮件应用程序相同的功能,即用户只能缩放消息内容,并且在缩放时看起来 webview 的高度在增加。我尝试在 UITableView 的页脚上使用 webview 设置。我放大了 webview,但它显示了 tableview 和 webview 的滚动条。我想如果我增加 webview 的高度取决于缩放比例,它只会在表格视图上显示滚动条。你有什么想法吗?
      • 有没有人能做到这一点。我正在尝试模仿本机邮件客户端 UI 做完全相同的事情,但无法这样做。 webView缩放时如何重新定位其他视图?
      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 2013-11-08
      • 2011-08-14
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多