2010-07-23 12 views
5

Sto provando a creare un'applicazione nativa che a tutti gli effetti sia HTML/CSS e Javascript. Funziona tutto bene, ma quando UIWebView carica c'è un ritardo mentre il DOM è popolato, le immagini recuperate ecc.Visualizzazione di un'immagine di sfondo su UIWebView

Esiste comunque la possibilità di visualizzare un'immagine di sfondo su UIWebView o qualcosa dietro di esso? Idealmente, questo sarà lo stesso della schermata iniziale in modo che non influenzi l'esperienza della transizione dalla barra all'app.

Grazie

Robbie

risposta

3

Non credo tu voglia impostare UIWebView come trasparente e mostrare un'immagine dietro di esso.

Invece dovresti avere una sorta di vista (magari con un'immagine come suggerisci, magari con un UIIndicator e una vista semi-trasparente che "scurisce" la pagina) che rimane lì finché UIWebView non ha caricato il suo contenuto.

A tale scopo, prima la classe deve sottoscrivere il protocollo UIWebViewDelegate:

@interface myWebView : UIViewController <UIWebViewDelegate> { 
    // variables etc 
} 

Quindi, è possibile mostrare una vista del carico:

-(void)viewDidLoad { 
    myView.hidden = NO; 
} 

E, infine, è possibile ignorare la webViewDidFinishLoad metodo per nasconderlo una volta caricato

- (void)webViewDidFinishLoad:(UIWebView *)localwebView { 
    myView.hidden = YES; 
} 
+1

Gli eventi appropriati vengono attivati ​​per qualcosa come UIWebView al caricamento e il rendering di HTML e CSS? Qualcosa come l'equivalente $ (document) .ready() di jQuery? Farò sicuramente un tentativo, grazie. – Robbie

+0

Sì, l'equivalente jQuery è un buon confronto. – h4xxr

30

ho dovuto effettuare le seguenti operazioni nel mio codice per ottenere uno sfondo trasparente sul mio UIWebViews - Io di solito fare questo nel metodo viewDidLoad del UIViewController

self.webView.backgroundColor = [UIColor clearColor]; 
self.webView.opaque = NO; 

Penso che sia possibile apportare tali modifiche in Interface Builder nelle proprietà UIWebViews.

--- --- Modifica

E per l'immagine di sfondo si può semplicemente mettere un UIImageView dietro l'UIWebView ora che hai dato uno sfondo trasparente.

+0

iOS4 dà tutte le viste una nuova proprietà di .backgroundView che elimina la necessità di impostare .backgroundColor a clearColor e poi mettere un'immagine dietro di esso. Tuttavia non sono d'accordo che l'aggiunta di un'immagine di sfondo (che la pagina web caricherà gradualmente * in alto * di) è l'approccio giusto qui ... – h4xxr

+0

Quindi, sicuramente funziona, ho avuto alcuni problemi con il caricamento da diversi paesaggi ma è qualcosa che ho bisogno di imparare comunque. – Robbie

+0

La soluzione perfetta !! – iwill

1

Aggiungere l'immagine per visualizzare il controller in XIB o per plistare di "Avvia immagine". Questo mostrerà la schermata iniziale dall'inizio. Durante il caricamento del WebView in viewDidLoad nascondere la webview

webView.hidden = YES; 

carico WebView con contenuto HTML come al solito in viewDidLoad

volta WebView è caricato, effettuare l'aggiornamento della visualizzazione dopo alcuni. Penso che questo consentirà un po 'di tempo per completare la funzione dei delegati e procedere con gli aggiornamenti dell'interfaccia utente.

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [self performSelector:@selector(updateWebView) withObject:nil afterDelay:1]; 
} 

-(void) updateWebView { 
    webView.hidden = NO; 
    self.view = webViewElement; 
    // or 
    [self.view addSubview:webViewElement]; 
} 

Ho provato come sopra funziona perfettamente senza schermo bianco.

8
webView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"senthil.jpg"]]; 
+0

Qualche ragione per cui questo non ha ottenuto voti alti? Ha funzionato meravigliosamente per me. L'unico dettaglio è che devi deselezionare la casella di controllo "opaco" e funziona come un fascino. –

Problemi correlati