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

È stato utile?

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.

https://github.com/MuscleRumble/THLabel

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:

https://github.com/nicklockwood/FXLabel

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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top