我有一个用于在UIWebView
中显示不同PDF文件的视图,此UIWebView
将PDF文件加载为NSData
,如:
webView.loadData(pdfData, MIMEType: "application/pdf", textEncodingName: "utf-8", baseURL: NSURL())
现在有些PDF文件需要通过UIButton
上方的UIWebView
进行轮播,有没有办法在UIWebView
内旋转PDF?
到目前为止我尝试过的是
webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)
)
但这并没有让我得到我想要的结果。
答案 0 :(得分:7)
shouldAutorotate
方法。检查当前statusBarOrientation
,然后按如下方式更新UIInterfaceOrientation
: -
let interfaceOrienation : UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
if(interfaceOrienation == UIInterfaceOrientation.Portrait){
let value = UIInterfaceOrientation.LandscapeLeft.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
}else{
let value = UIInterfaceOrientation.Portrait.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
}
我为你开发了sample project
。请按照以下链接下载full code
。
https://www.dropbox.com/s/3hk5y9g7v74cbkd/Stackoverflow_webview.zip?dl=0
答案 1 :(得分:3)
如果我理解了您的问题,那么在旋转后将PDF放在中心位置,从顶部正确显示它,不幸的是CGAffineTransformMakeRotation
只是它还不够......
你可以这样做:
webView.scalesPageToFit = true
let scale = CGAffineTransformMakeScale(0.6, 0.6)
let translate = CGAffineTransformMakeTranslation(webView.frame.origin.x, webView.frame.origin.y - webView.frame.size.height * 0.25)
let transform = CGAffineTransformConcat(translate, scale);
webView.transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
从变换中返回:
webView.transform = CGAffineTransformIdentity
还有另一种工作方法,但我不建议:
(只是为了轮换而处理html页面太长太难了。)
设置webView - > 加载响应式HTML页面 - > 此响应式HTML页面加载PDF - > 向webView注入以下javascript代码
func webViewDidFinishLoad(webView: UIWebView) {
let js = "document.body.style.setProperty('-webkit-transform', 'rotate(-90deg)', null);"
webView.stringByEvaluatingJavaScriptFromString(js)
}
如果您愿意,也可以从JSFiddle查看您的JS。
答案 2 :(得分:1)
目前我确实使用此代码进行旋转,但“视图不会保持居中(我认为基于我的自动布局)
print(webView.transform)
if (webView.transform.a == 1.0 && webView.transform.d == 1.0) {webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI/2));print("done1")}
else if(webView.transform.b == 1.0 && webView.transform.c == -1.0) {webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI));print("done2")}
else if(webView.transform.a == -1.0 && webView.transform.d == -1.0) {webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI+(M_PI/2)));print("done3")}
else if(webView.transform.b == -1.0 && webView.transform.c == 1.0) {webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI + M_PI));print("done4")}
else{print("nothing happens")}
示例vid http://imgur.com/O2Qjuu2