2013-05-19 13 views
7

Sto cercando di assegnare un'etichetta in una delle classi della mia app a un'ombra esterna, ma non funziona affatto. Non si presenta nulla Che cosa sto facendo di sbagliato?Tentativo di assegnare a UILabel un'ombra, ma non verrà visualizzato

// Set label properties 
titleLabel.font = [UIFont boldSystemFontOfSize:TITLE_FONT_SIZE]; 
titleLabel.adjustsFontSizeToFitWidth = NO; 
titleLabel.opaque = YES; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textColor = titleLabelColor; 
titleLabel.shadowColor = [UIColor blackColor]; 
titleLabel.shadowOffset = CGSizeMake(10, 10); 

È solo bianco, senza ombra.

+0

Non so se questo aiuterà, ma 'opaque' dovrebbe essere' NO'. Inoltre, questo è un grande 'shadowOffset'. – fumoboy007

+0

E la proprietà 'clipsToBounds'? – holex

+0

sei sicuro che titleLabelColor non sia backColor? inoltre, penso che l'offset di 10,10 sia troppo grande, e la tua ombra potrebbe uscire dai viewbound. Prova ad impostarlo come (qualsiasi) combo di 1 e -1 –

risposta

13

Basta aggiungere questa riga prima di aggiungere titleLabel a self.view

titleLabel.layer.masksToBounds = NO; 

buona fortuna !!

+0

Questo non funziona per me. Sto creando un pulsante a livello di codice e prima di aggiungerlo alla vista, chiamo button.titleLabel? .layer.masksToBounds = false, ma le mie ombre vengono ancora ritagliate in basso. – endavid

0

Assicurati solo di assegnare UILabel e di impostare una cornice per l'etichetta. E assicurati anche che la vista sia aggiunta alla sottoview. Qualcosa del genere:

titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 30)]; 
    titleLabel.font = [UIFont boldSystemFontOfSize:14]; 
    titleLabel.adjustsFontSizeToFitWidth = NO; 
    titleLabel.opaque = YES; 
    titleLabel.text = @"My Label"; 
    titleLabel.backgroundColor = [UIColor clearColor]; 
    titleLabel.textColor = [UIColor whiteColor]; 
    titleLabel.shadowColor = [UIColor blackColor]; 
    titleLabel.shadowOffset = CGSizeMake(5, 5); 
    [myView addSubview:titleLabel]; 
    [titleLabel release]; 

valore 10 per l'offset dell'ombra è piuttosto grande. È possibile modificare i valori in base alle proprie esigenze.

+0

Assicurarsi che l'altezza dell'etichetta e l'offset dell'ombra che si sta specificando non siano uguali. Se è così allora, non vedrai mai l'ombra perché, uscirà dai limiti. – m4n1c

3

spero che tu sia a conoscenza di categorie?

Creazione di una categoria sarà scelta migliore:

Command + N > Objective-C Category > Category = Animation & Category on = UIView Questo creerà 2 file con il nome UIView+Animation.h e UIView+Animation.m

UIView+Animation.h file di

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@interface UIView (Animation) 
- (void)setBackgroundShadow:(UIColor *)shadowColor CGSize:(CGSize)CGSize shadowOpacity:(float)shadowOpacity shadowRadius:(float)shadowRadius; 
@end 

UIView+Animation.m file di

#import "UIView+Animation.h" 

@implementation UIView (Animation) 
- (void)setBackgroundShadow:(UIColor *)shadowColor CGSize:(CGSize)CGSize shadowOpacity:(float)shadowOpacity shadowRadius:(float)shadowRadius 
{ 
    self.layer.shadowColor = shadowColor.CGColor; 
    self.layer.shadowOffset = CGSize; 
    self.layer.shadowOpacity = shadowOpacity; 
    self.layer.shadowRadius = shadowRadius; 
    self.clipsToBounds = NO; 
} 
.210

Importa UIView+Animation.h in qualsiasi della vostra viewController e chiamare in questo modo:

[self.titleLabel setBackgroundShadow:[UIColor grayColor] CGSize:CGSizeMake(0, 5) shadowOpacity:1 shadowRadius:5.0]; 
+0

Ho cambiato il nome del secondo parametro del metodo in shadowOffset. Un piccolo ritocco, ma trovo il codice più leggibile in questo modo. Inoltre evita di utilizzare un nome parametro che è in conflitto con un tipo iOS. –

Problemi correlati