2016-03-30 26 views
5

mam widok, który jest używany, aby pokazać różne pliki PDF w UIWebView ten UIWebView załadować plik PDF jako NSData jak:Obrót PDF w UIWebView z Swift

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

Teraz istnieje kilka plików PDF, które muszą być obróconym przez UIButton, który jest powyżej UIWebView, czy istnieje sposób, aby obrócić PDF wewnątrz UIWebView?

co zrobiłem do tej pory było spróbować

webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))

ale to nie był już mi wynik szukałem.

+0

Chciałbym odpowiedzieć na to pytanie, ale wcześniej proszę podać odpowiedzi na następujące pytania: 1. Czy chcesz zaktualizować tylko ramkę widoku internetowego lub obrócić orientację ekranu dla tego konkretnego pliku pdf. 2. Czy korzystasz z układów automatycznych? – pkc456

+0

@ pkc456 Tak, używam automatyczny układ, po prostu chcę "obrócić pdf" aka treść webview –

Odpowiedz

6
  • Aby obrócić pojedynczy kontroler widoku w aplikacji, należy przesłonić metodę shouldAutorotate.
  • sprawdzić aktualny statusBarOrientation, a następnie zaktualizować UIInterfaceOrientation następująco: -

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

opracowałem sample project dla Ciebie. Kliknij poniższy link, aby pobrać full code. https://www.dropbox.com/s/3hk5y9g7v74cbkd/Stackoverflow_webview.zip?dl=0

enter image description here

+1

bardzo dziękuję @ pkc456, ale to zamienia cały ekran, więc również "tytuł paska" się odwrócił: -/to samo dla mojego nakładki na przyciski w górnej części widoku, myślałem o sposobie zwrócenia "widoku" –

1

Obecnie robię użyć tego kodu, aby obrócić, ale „widok nie pozostaje wyśrodkowany (myślę, że na podstawie mojego układu auto)

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

przykład vid http://imgur.com/O2Qjuu2

3

Jeśli rozumiem Twój problem, wyśrodkuj plik PDF po jego obróceniu, aby wyświetlał go poprawnie z góry, niestety CGAffineTransformMakeRotation tylko to nie wystarczy ..

można zrobić:

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

i wrócić z powrotem przekształcić:

webView.transform = CGAffineTransformIdentity 

Jest też inna metoda działa, ale Nie polecam do:

(jest zbyt długi i zbyt trudny do obsługi strony html tylko po to, aby obrócić ..)

zestaw Webview ->obciążenie responsive strona HTML ->ten reaguje strona HTML obciążenie PDF ->wstrzykują do Webview następujący kod javascript

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

można sprawdzić JS także od JSFiddle, jeśli chcesz to zrobić.