2016-03-30 18 views
5

ho avuto una visione che viene utilizzato per mostrare diversi file PDF in un UIWebView, questo UIWebView carico il file PDF come NSData come:Ruota PDF in UIWebView con Swift

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

Ora ci sono alcuni file PDF che hanno bisogno da ruotare tramite UIButton che è sopra lo UIWebView, c'è un modo per ruotare il PDF all'interno dello UIWebView?

cosa ho provato finora è stato

webView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))

ma questo non mi è stato ottenere il risultato che cercavo.

+0

Vorrei rispondere a questa domanda, ma prima di fornirmi le risposte seguenti: 1. Volete aggiornare solo la cornice della vista Web o ruotare l'orientamento dello schermo per quel particolare PDF. 2. Stai usando i layout automatici. – pkc456

+0

@ pkc456 sì, io uso il layout automatico, voglio semplicemente "girare il pdf" alias il contenuto della webview –

risposta

6
  • Per ruotare il singolo view-controller nell'applicazione, sovrascrivere il metodo shouldAutorotate.
  • Controllare la corrente statusBarOrientation, quindi aggiornare il UIInterfaceOrientation come segue: -

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

ho sviluppato un sample project per voi. Si prega di seguire il link sottostante per scaricare il full code. https://www.dropbox.com/s/3hk5y9g7v74cbkd/Stackoverflow_webview.zip?dl=0

enter image description here

+1

grazie mille @ pkc456, ma questo trasforma lo schermo completo in modo che anche la "barra del titolo" venga girata: -/same per il mio pulsanti sovrapposti in cima alla visualizzazione Web, stavo pensando a un modo per restituire la "webview" –

1

Attualmente lo faccio usare questo codice per ruotare, ma la "vista non rimane centrato (penso in base alla mia layout automatico)

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

esempio vid http://imgur.com/O2Qjuu2

3

Se ho capito il tuo problema è centrare il tuo PDF dopo averlo ruotato, per visualizzarlo correttamente dall'alto, sfortunatamente CGAffineTransformMakeRotation solo non basta ..

si può fare:

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

E per tornare indietro da trasformare:

webView.transform = CGAffineTransformIdentity 

C'è anche un altro metodo di lavoro, ma Non consiglio a do:

(è troppo lungo e troppo difficile da gestire la pagina html solo per effettuare una rotazione ..)

set WebView ->caricamento di una pagina HTML sensibile ->questa pagina HTML sensibile carico PDF ->dell'iniezione in WebView il seguente codice javascript

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

È possibile verificare le JS anche da JSFiddle se si vuole farlo.

Problemi correlati