2011-02-06 18 views

risposta

88

Ecco come si imposta uno sfondo a un'immagine:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]]; 

Edit: di scrivere ciò che ha detto Felixyz (e grazie a Manni), farlo nel vostro delegato:

window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]]; 

E in ogni vista che si desidera avere l'immagine, fare questo:

self.view.backgroundColor = [UIColor clearColor]; 
+7

Ho finito per usare UIImageView sul pennino della finestra principale e UIColor clearColor sulle mie viste. Si noti che l'uso di colorWithPatternImage come si è detto sopra ha fatto passare la memoria da 1,7 M a 9,5 M quando l'app viene caricata per la prima volta - colorWithPatternImage sembra consumare solo una tonnellata di memoria. – Slee

+1

Si consiglia di preparare 3 file png per l'app universale, ad esempio Background.png, [email protected], Background ~ iPad.png e impostare lo sfondo utilizzando il codice seguente: self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ "Background"]]; iOS seleziona il file png corretto a causa della categoria del dispositivo. Spero che questo aiuto. – ZYiOS

+0

Ho provato l'approccio di cui sopra in un'applicazione basata su UINavigation. Il problema con questo approccio è che l'impostazione di un'immagine su window.background imposta correttamente l'immagine, ma rendendo l'altra vista trasparente il colore è negativo come durante la visualizzazione push o pop sovrapponendo puoi vedere le viste inserite nello stack. Qualsiasi idea di come risolverlo – Shekhu

8

Dipende dal tipo di interfaccia che hai. A schede? Basato sulla navigazione? Ma la risposta generale è: aggiungi UIImageView al tuo UIWindow prima/sotto la tua vista principale. Quindi fai in modo che ogni vista gestita dal controller della vista principale abbia uno sfondo trasparente. Difficile dare consigli più specifici senza sapere se si usa IB o no, o come si presenta la gerarchia della vista.

+1

navigazione basato, in modo da visualizzare i controllori sono spinti e spuntato lo sfondo rimane – Slee

+0

Combinando sudo e di suggerimenti di Manni lo rende facile da realizzare quello che vi serve: impostare la backgroundColor sulla finestra per essere un'immagine (colorWithPatternImage :) e rendere backgroundColor sul controller di navigazione e tutti i suoi sub-controller trasparenti. Potrebbe essere necessario impostare opaque = NO anche su di essi. Tieni presente che ciò potrebbe influire sulle prestazioni durante le animazioni, ma non dovrebbe essere un problema sui dispositivi più recenti. – Felixyz

7

Nella mia app, ho impostato un colore di sfondo predefinito. Forse si può fare questo è immagine di sfondo con:

1 .: Impostare il colore del vostro UIWindow sfondo nel AppDelegate:

window.backgroundColor = [UIColor myBackgroundGray]; // own Category 

2 .: E ora, fare tutte le altre viste trasparente:

self.view.backgroundColor = [UIColor clearColor]; // = transparent 
+1

Questo causa un problema quando si presentano i presentatori modali con l'animazione. È possibile visualizzare i controlli dalla vista modale e dalla vista esistente e quindi la vista esistente scompare. –

2

Lo sfondo è una proprietà di qualsiasi oggetto che eredita la vista. Etichette, pulsanti, controller e la finestra dell'app, ad esempio, hanno tutti gli sfondi. Se vuoi che diventi completamente un bg per l'intera app, devi scalare il percorso dei tuoi controller per trovare la vista "top" (vista dal basso) e impostare il suo sfondo come l'immagine che desideri.

7

Nella tua AppDelegate in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Aggiungere questa riga:

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]]; 

Dopo devi solo impostare le visualizzazioni sfondi per [UIColor clearColor];

3

Non sono sicuro delle implicazioni sulle prestazioni, ma avevo bisogno di realizzare qualcosa di simile, e ho finito per usare un UIImageView che funziona bene (in C#, ma funziona allo stesso modo in obj-c):

//Add the view controller first, to ensure proper order of views later. 
Window.RootViewController = new UIViewController(); 

//create backdrop image view 
var imageView = new UIImageView(Window.Bounds); 
imageView.Image = UIImage.FromBundle("backdrop.jpg"); 

//insert into window. 
Window.InsertSubview(imageView, 0); 

Questo non gestisce i cambiamenti di orientamento, ma nel mio caso, mi ha permesso di aggiungere effetti di movimento sullo sfondo (come la parallasse).

0

Di solito uso questa funzione per evitare sovrapposizioni con la barra di navigazione su iphone.

-(void)setImageBackground:(NSString*)imageName{ 
    UINavigationController* navigationController = [self navigationController]; 
    float height = navigationController.toolbar.frame.size.height; 
    CGSize size = self.view.frame.size; 
    size.height = size.height; 
    UIGraphicsBeginImageContext(size); 
    CGRect bounds = self.view.bounds; 
    bounds.origin.y = bounds.origin.y + height; 
    bounds.size.height = bounds.size.height-height; 
    [[UIImage imageNamed:imageName] drawInRect:bounds]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:image]; 
} 
0

basta chiamare questo assignbackground in viewDidLoad

override func viewDidLoad() { 
assignbackground() 
} 

func assignbackground(){ 
     let background = UIImage(named: "background") 

     var imageview : UIImageView! 
     imageview = UIImageView(frame: view.bounds) 
     imageview.contentMode = UIViewContentMode.ScaleAspectFill 
     imageview.clipsToBounds = true 
     imageview.image = background 
     imageview.center = view.center 
     view.addSubview(imageview) 
     self.view.sendSubviewToBack(imageview) 
    } 
Problemi correlati