2014-04-03 6 views
9

La struttura è la seguente:Preservare il colore dell'immagine originale delle icone UITabBar selezionati e non selezionati

Nel mio storyboard, ho un Tab Bar Controller che contiene un oggetto Tab Bar. Questo oggetto ha una classe personalizzata in cui ho solo questo metodo:

- (void)awakeFromNib 
{ 
    NSArray *imageNames = @[@"test1", @"test2", @"test3", @"test4", @"test5"]; 
    for (int i=0; i<5; i++) { 
     UITabBarItem *item = [self.items objectAtIndex:i]; 
     NSString *imageName = [imageNames objectAtIndex:i]; 
     item.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
     item.selectedImage = [UIImage imageNamed:[imageName stringByAppendingString:@"-selected"]]; 
    } 
} 

ho creato un Asset Catalog che contiene le mie icone Tab Bar, entrambe le versioni selezionati e non selezionati (colori differenti).

Il documentation per UIImageRenderingModeAlwaysOriginal menzioni Disegna sempre l'immagine originale, senza trattarla come modello. che dovrebbe preservare il colore dell'immagine originale. Questo non sembra accadere e il suggerimento this non ha funzionato neanche.

Quello che succede invece è che nello stato selezionato, le mie icone della barra delle schede ottengono il colore di tinta blu predefinito.

Una cosa che ho notato è che se faccio la seguente (tratto da here) nel didFinishLaunchingWithOptions nel AppDelegate, allora posso impostare il colore delle icone Tab Bar selezionati come voglio:

[[UITabBar appearance] setTintColor:[UIColor purpleColor]]; 

la documentazione per la setTintColor menzioni:

il colore della tinta da applicare agli elementi barra delle schede del bar scheda. A partire da iOS 7.0, il colore della tinta che si applica agli elementi della barra delle schede di una barra delle schede è il primo colore tinta non predefinito nella gerarchia della vista, a partire dalla barra delle schede stessa.

Ciò significa che indipendentemente dal colore delle icone della barra delle schede (originale nelle immagini stesse), nello stato selezionato avranno sempre il colore di tintColor?

O sto facendo qualcosa di sbagliato/manca qualcosa?

Sto riscontrando questo problema su iOS 7.0 e 7.1.

+1

Spero che la mia risposta ti può aiutare. –

risposta

16

Domanda perfetta, davvero ben spiegata.

Non si imposta imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal per l'immagine selezionata.

Basta dovrebbe aggiungereimageWithRenderingMode:UIImageRenderingModeAlwaysOriginal al selectedImage:

item.selectedImage = [[UIImage imageNamed:[imageName stringByAppendingString:@"-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

check quest'altra answer.

+1

E 'stato! Non l'ho visto davvero. Ero così convinto che è perché il 'tintColor' sovrascrive il colore dell'immagine. Sì, errori del principiante. Grazie, Gabriel! Risolto! – Alex

+0

Bello ma funziona la seconda volta non è la prima volta – JAck

11

Basta andare alla vostra immagine attività proprietà, e impostare Render come proprietà a "immagine originale"

enter image description here

e siete pronti per partire!

+0

Grazie! Per me funziona. – BurtK

2

Swift 3:

for item in self.tabBar.items!{ 
     item.selectedImage = item.selectedImage?.withRenderingMode(.alwaysOriginal) 
     item.image = item.image?.withRenderingMode(.alwaysOriginal) 
    } 
Problemi correlati