如何检测UIWebView的缩放比例

问题描述:

我想在用户放大时增加UIWebView的高度(如iPhone中的默认邮件应用程序)。 所以,我试了下面的代码来查找webview中的滚动视图,并添加UIScrollViewDelegate以使用scrollViewDidZoom来检测缩放比例以增加此方法上webview的高度。如何检测UIWebView的缩放比例

// 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); 
} 

的问题是,我不能放大/缩小上scrollViewDisEndZooming方法的WebView 但NSLog显示

规模1.0

当我结束变焦 和scrollViewDidZoom方法没”什么都不显示。 我想要检测webview的缩放比例来计算scrollViewDidZoom的高度。

我做错了什么? 请帮忙。

在此先感谢。

我不认为有一个正确的方法来从暴露的API中做到这一点,但有一个hacky的方式。

A UIWebView包含UIScrollView,可以给它一个委托。然后,当缩放更改时,您(委托人)会得到一个名为scrollViewDidZoom:的回调。

为了找到滚动视图,您可以从Web视图中获取subviews集合,并重复查看哪一个isKindOfClass:[UIScrollView class]

现在,UIWebView也符合UIScrollViewDelegate。所以这可能意味着你正在改变网络视图的实现,这可能是一个坏主意。测试好。

+0

感谢您的回答。我想在iPhone中实现与默认邮件应用程序相同的功能,用户只能缩放邮件内容,而缩放它看起来像是webview的高度增加。我试图在UITableView的页脚上使用webview设置。我缩放webview,但它显示tableview和webview的滚动条。我想如果我增加webview的高度取决于缩放比例,它将只在桌面视图上显示滚动条。你有什么主意吗? – Dolly 2011-03-28 04:21:21

+0

有没有人能够做到这一点。我正在尝试模仿本地邮件客户端用户界面做同样的事情,但无法做到这一点。如何在webView变焦时重新定位其他视图? – SayeedHussain 2011-05-21 10:08:16

我已经做得很好了为您的代码了,做以下modificaitons:

你刚才得到的滚动视图类点,则可以得到scrollview.contentSize.width,当你放大或缩小,可以改变,但滚动视图.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); 

}