2010-02-13 16 views
8

Sto aggiungendo un UILabel a ciascuna cella nella mia vista tabella. Questo non presenta inizialmente problemi. Quando faccio il giro degli angoli di UILabel usando lo scorrimento layer.cornerRadius, la vista tabella si ferma.UITableView arriva a passo d'uomo quando si aggiunge una UILabel con cornerRadius a ciascuna cella

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(cell.bounds.origin.x+10 ,5, 30, 30)]; 
label1.backgroundColor = ([[managedObject valueForKey:@"color"] hasPrefix:@"FFFFFF"]) ? [UIColor blackColor] : color; 
label1.layer.cornerRadius = 10.0f; 
[cell addSubview:label1]; 
+0

Si potrebbe voler vedere [come Tweetie lo fa] (http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/) (scorre agevolmente). – icktoofay

risposta

7

Ho provato questo prima di me stesso e ho scoperto che è inutile per qualsiasi tipo di vista che si muove. Dovresti creare un'immagine con angoli arrotondati e aggiungerla come sfondo dell'etichetta.

+0

questa non è una soluzione davvero buona perché su etichette di diverse dimensioni, l'immagine si allungherà e quel raggio d'angolo dato dall'immagine sarà diverso dagli altri .. –

15

Non v'è alcuna necessità di un'immagine con angoli rouned - vedere la risposta da fknrdcls a questa domanda:

UILabel layer cornerRadius negatively impacting performance

In sostanza, è sufficiente dare l'etichetta uno sfondo trasparente, e aggiungere il colore di sfondo al livello invece. Quindi, è possibile disabilitare maskToBounds, che migliora notevolmente le prestazioni. Così il codice diventa:

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(cell.bounds.origin.x+10 ,5, 30, 30)]; 
label1.backgroundColor = [UIColor clearColor]; 
label1.layer.backgroundColor=[UIColor whiteColor].CGColor; 
label1.layer.cornerRadius = 10.0f; 
label1.layer.masksToBounds = NO; 
label1.layer.shouldRasterize = YES; 
+0

+1 Mi piace molto questa soluzione, ma ho bisogno ** solo di alcuni angoli arrotondato **. La mia soluzione è: per 'mostrare' solo gli angoli in alto e in basso a destra, aggiungo una sottoview con un valore negativo sul suo 'frame.origin.x' e assegno' cornerRadius' al suo 'layer'. Se qualcuno ha trovato una soluzione migliore per quel bisogno, sono interessato. – anneblue

0

per un UIImageView il trucco UILabel non ha funzionato perché ho dovuto ritagliare un'immagine così, non solo un colore di sfondo. la soluzione più rapida che ho trovato è stata quella di rasterizzare il genitore della vista ogni volta che l'ho animato (ho un pannello scorrevole).