iPhone UILabel testo soft shadow
-
19-09-2019 - |
Domanda
So ombre morbide non sono supportati dal UILabel, fuori dalla scatola, sull'iPhone.Quindi, quale sarebbe il modo migliore per implementare mio?
EDIT:
Ovviamente io sottoclasse l' UILabel
e disegnare in -drawRect:La mia domanda è, come faccio a ottenere il contenuto dell'etichetta, grafica e disegnare intorno a loro, blur ecc...
EDIT 2:
Sono tornato a questa domanda, circa un anno dopo.Nel frattempo ho creato una classe che ti permette di aggiungere facilmente ombra morbida per un'etichetta e tweak è raggio, ecc e anche per disegnare i gradienti sul testo stesso.Lo si può trovare su GitHub: https://github.com/doukasd/iOS-Components/tree/master/Views
Soluzione
Questa risposta per this domanda simile fornisce il codice per disegnare un'ombra sfocata dietro un UILabel. L'autore usa CGContextSetShadow () per generare l'ombra per il testo elaborato.
Altri suggerimenti
Al 3.2 c'è il supporto diretto per ombre nel SDK.
label.layer.shadowColor = [label.textColor CGColor];
label.layer.shadowOffset = CGSizeMake(0.0, 0.0);
Importa <QuartzCore/QuartzCore.h>
e giocare con alcuni parametri:
label.layer.shadowRadius = 3.0;
label.layer.shadowOpacity = 0.5;
E, se si trova la tua ombra ritagliato dai limiti etichetta:
label.layer.masksToBounds = NO;
, infine, impostare
label.layer.shouldRasterize = YES
Vi consiglio di utilizzare le proprietà ShadowColor e shadowOffset di UILabel:
UILabel* label = [[UILabel alloc] init];
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0,1);
In aggiunta alla risposta di IIDan: Per alcuni scopi è necessario impostare
label.layer.shouldRasterize = YES
Credo che questo sia dovuto al metodo di fusione che viene utilizzato per rendere l'ombra. Per esempio ho avuto uno sfondo scuro e testo bianco su di esso e ha voluto "evidenziare" il testo usando un bagliore oscuro nero. Non funzionava fino a quando ho impostato questa proprietà.
Applicare l'ombra (morbida) sulla vista del strato , in questo modo:
UILabel *label = [[UIabel alloc] init];
label.layer.shadowColor = [[UIColor whiteColor] CGColor];
label.layer.shadowOpacity = 1.0;
Per mantenere le cose fino ad oggi:La creazione dell'ombra in Swift è semplice:
Importare il QuartzCore Quadro
import QuartzCore
E impostare l'ombra attributi per l'etichetta
titleLabel.shadowColor = UIColor.blackColor()
titleLabel.shadowOffset = CGSizeMake(0.0, 0.0)
titleLabel.layer.shadowRadius = 5.0
titleLabel.layer.shadowOpacity = 0.8
titleLabel.layer.masksToBounds = false
titleLabel.layer.shouldRasterize = true
_nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_nameLabel.font = [UIFont boldSystemFontOfSize:19.0f];
_nameLabel.textColor = [UIColor whiteColor];
_nameLabel.backgroundColor = [UIColor clearColor];
_nameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.2];
_nameLabel.shadowOffset = CGSizeMake(0, 1);
penso che si dovrebbe usare il [UIColor colorWithWhite: 0 alpha: 0.2]. Per impostare il valore alfa
Ho provato quasi tutte queste tecniche (tranne FXLabel) e non poteva ottenere qualsiasi di loro di lavorare con iOS 7. finalmente ho trovato THLabel che sta lavorando perfettamente per me. Ho usato THLabel in Interface Builder e Runtime Definito impostazione attributi utente in modo che sia facile per un non programmatore di controllare l'aspetto grafico.
Questo come un trucco,
UILabel *customLabel = [[UILabel alloc] init];
UIColor *color = [UIColor blueColor];
customLabel.layer.shadowColor = [color CGColor];
customLabel.layer.shadowRadius = 5.0f;
customLabel.layer.shadowOpacity = 1;
customLabel.layer.shadowOffset = CGSizeZero;
customLabel.layer.masksToBounds = NO;
Ho scritto una libreria che fornisce una sottoclasse UILabel con supporto morbida ombra e un sacco di altri effetti:
sottoclasse UILabel, come si è detto, poi, in drawRect :, fare [self drawTextInRect:rect];
per ottenere il testo elaborato nel contesto attuale. Una volta che è lì, si può iniziare a lavorare con esso con l'aggiunta di filtri e quant'altro. Se si vuole fare un ombra con quello che hai appena pescato nel contesto, si dovrebbe essere in grado di utilizzare:
CGContextSetShadowWithColor()
Se vuoi che la funzione up nella documentazione per imparare a usarlo.
Come di iOS 5 Apple fornisce un metodo privato API per creare etichette con ombre morbide. Le etichette sono molto veloci: sto usando decine allo stesso tempo in una serie di punti di vista trasparenti e non c'è alcun rallentamento scrolling animazione
.Questo è utile solo per le applicazioni Negozio-App non (ovviamente) ed è necessario il file di intestazione.
$SBBulletinBlurredShadowLabel = NSClassFromString("SBBulletinBlurredShadowLabel");
CGRect frame = CGRectZero;
SBBulletinBlurredShadowLabel *label = [[[$SBBulletinBlurredShadowLabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.text = @"I am a label with a soft shadow!";
[label sizeToFit];
In Swift 3
, è possibile creare un interno:
import UIKit
extension UILabel {
func shadow() {
self.layer.shadowColor = self.textColor.cgColor
self.layer.shadowOffset = CGSize.zero
self.layer.shadowRadius = 3.0
self.layer.shadowOpacity = 0.5
self.layer.masksToBounds = false
self.layer.shouldRasterize = true
}
}
e utilizzarlo tramite:
label.shadow()
sottoclasse UILabel, e sovrascrivere -drawInRect: