使用Swift在UIWebView中旋转PDF

时间:2016-03-30 19:11:12

标签: ios iphone swift pdf uiwebview

我有一个用于在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)

但这并没有让我得到我想要的结果。

3 个答案:

答案 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 codehttps://www.dropbox.com/s/3hk5y9g7v74cbkd/Stackoverflow_webview.zip?dl=0

enter image description here

答案 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