天天看點

iOS手勢縮放字型大小

實作在UIWebView通過手勢控制字型大小的功能 實作思路: UIPinchGestureRecognizer + js注入

1) 通過NSInteger *fontSize; 記錄目前字型放大的比例 2)設定html中user-scale=0

  1. <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">  

在(void)webViewDidFinishLoad:(UIWebView *)webView中注入js代碼

NSString *meta = [NSString stringWithFormat:@"var element = document.createElement('meta'); element.name = \"viewport\"; element.content = \"width=device-width,initial-scale=1.0,minimum-scale=0.5,maximum-scale=3,user-scalable=0\"; var head = document.getElementsByTagName('head')[0]; head.appendChild(element);"]; [webView stringByEvaluatingJavaScriptFromString:meta];

3)向webview中添加UIPinchGestureRecognizer 注意:gesture的代理

// 手勢 UIPinchGestureRecognizer *gesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(switchFontSize:)]; gesture.delegate = self; [webView addGestureRecognizer:gesture]; 4)完成對應的功能 -(void)switchFontSize:(UIPinchGestureRecognizer *)gesture { // NSLog(@"gesture.state=%ld", gesture.state); // NSLog(@"gesture.scale=%f", gesture.scale); if(gesture.state==UIGestureRecognizerStateEnded | gesture.state==UIGestureRecognizerStateCancelled){ NSString *js=@""; if(gesture.scale<1.0){ fontSize<=80?fontSize:(fontSize-=10); // 最小縮放到80% }else{ fontSize >=200?fontSize:(fontSize+=10); // 最大放大200% } js = [NSString stringWithFormat:@"document.body.style.webkitTextSizeAdjust='%d%%'", fontSize]; NSLog(@"js:%@", js); [self.webView stringByEvaluatingJavaScriptFromString:js]; } }

參考文獻: http://www.programgo.com/article/68602880207/