实现在UIWebView通过手势控制字体大小的功能
实现思路: UIPinchGestureRecognizer + js注入
1) 通过NSInteger *fontSize; 记录当前字体放大的比例
2)设置html中user-scale=0
- <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];
}
}
参考文献: