2016-03-30 16 views
5

Tôi có một quan điểm cho rằng được sử dụng để hiển thị các tập tin PDF khác nhau trong một UIWebView, UIWebView tải file PDF này như NSData như:Xoay PDF trong UIWebView với Swift

webView.loadData(pdfData, MIMEType: "application/pdf", textEncodingName: "utf-8", baseURL: NSURL()) 

Bây giờ có một số tập tin PDF cần được xoay qua UIButton phía trên UIWebView, có cách nào để xoay PDF bên trong của UIWebView không?

gì tôi đã cố gắng cho đến nay là

webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))

nhưng điều này đã không nhận được cho tôi những kết quả tôi đang tìm kiếm.

+0

Tôi muốn trả lời câu hỏi này nhưng trước đó hãy cung cấp cho tôi câu trả lời sau: - 1. Bạn chỉ muốn cập nhật khung xem web hoặc xoay hướng màn hình cho pdf cụ thể đó. 2. Bạn có đang sử dụng bố cục tự động không. – pkc456

+0

@ pkc456 vâng tôi sử dụng bố cục tự động, tôi chỉ đơn giản muốn "biến pdf" hay còn gọi là nội dung webview –

Trả lời

6
  • Để xoay bộ điều khiển xem đơn trong ứng dụng, hãy ghi đè phương pháp shouldAutorotate.
  • Kiểm tra dòng điện statusBarOrientation, sau đó cập nhật UIInterfaceOrientation như sau: -

    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") 
    } 
    

tôi đã phát triển một sample project cho bạn. Vui lòng theo liên kết bên dưới để tải xuống full code. https://www.dropbox.com/s/3hk5y9g7v74cbkd/Stackoverflow_webview.zip?dl=0

enter image description here

+1

cảm ơn rất nhiều @ pkc456, nhưng điều này biến màn hình hoàn chỉnh sao cho "titlebar" được bật: -/tương tự cho các nút lớp phủ trên đầu trang của webview, tôi đã suy nghĩ về một cách để chỉ trả về "webview" –

1

Hiện nay tôi làm sử dụng mã này để xoay, nhưng "xem không ở lại làm trung tâm (tôi nghĩ rằng dựa trên bố trí ô tô của tôi)

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")} 

dụ vid http://imgur.com/O2Qjuu2

3

Nếu tôi hiểu vấn đề của bạn, đó là căn giữa tệp PDF của bạn sau khi bạn xoay nó, để hiển thị nó chính xác từ trên cùng, thật không may CGAffineTransformMakeRotation chỉ nó không đủ ..

Bạn có thể làm:

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)) 

Và để trở về từ transform:

webView.transform = CGAffineTransformIdentity 

Ngoài ra còn có một phương pháp làm việc nhưng Tôi không khuyên bạn nên do:

(quá dài và quá khó để xử lý trang html chỉ để xoay vòng ..)

bộ WebView ->tải một trang HTML đáp ứng ->trang HTML đáp ứng này tải PDF ->bơm để WebView sau mã javascript

func webViewDidFinishLoad(webView: UIWebView) { 
    let js = "document.body.style.setProperty('-webkit-transform', 'rotate(-90deg)', null);" 
    webView.stringByEvaluatingJavaScriptFromString(js) 
} 

Bạn có thể kiểm tra JS của bạn cũng từ JSFiddle nếu bạn muốn thực hiện.

Các vấn đề liên quan