[英]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.