Per quanto riguarda l'aspetto del carattere, ci sono un paio di opzioni:
È possibile utilizzare lo standard UILabel
per ottenere la maggior parte degli effetti (font, dimensione, colore, rotazione) che vedete qui . L'unica caratteristica oltre lo standard UILabel
è il tratto bianco attorno al carattere. Ma, efficace iOS 6, puoi anche ottenere l'effetto del tratto bianco attorno al testo rosso con uno standard UILabel
usando la sua proprietà attributedText
, che è un NSAttributedString
.
Nelle versioni iOS precedenti alla 6.0, per ottenere il tratto di colore bianco attorno al testo, è stato necessario utilizzare CoreGraphics o CoreText.
Per quanto riguarda il ridimensionamento dinamico, la rotazione e lo spostamento del testo, sono senza dubbio solo utilizzando sistemi di riconoscimento gesto che regolano la proprietà transform
della vista (più precisamente, probabilmente regolando transform
per la rotazione, la regolazione della center
o frame
per il trascinamento, e la regolazione sia la dimensione del carattere frame
e per il ridimensionamento (se si utilizza scale
trasformazione, si può finire con pixelation indesiderabili).
si otterrà un bel paio di buoni colpi se si cerca Stack Overflow per domande riguardanti i riconoscimenti di gesti e trascinamento, ridimensionamento e rotazione ng di punti di vista.
In iOS 6, se si desidera che il testo rosso con un bordo bianco con una UILabel
, si potrebbe fare qualcosa di simile:
// create attributes dictionary
NSDictionary *attributes = @{
NSFontAttributeName : [UIFont systemFontOfSize:48.0],
NSForegroundColorAttributeName : [UIColor redColor],
NSStrokeColorAttributeName : [UIColor whiteColor],
NSStrokeWidthAttributeName : @(-3)
};
// make the attributed string
NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:@"bigcat"
attributes:attributes];
self.label.attributedText = stringToDraw;
Per informazioni sulle stringhe attribuite in iOS, vedi:
Se è necessario supportare le versioni iOS prima di iOS 6, è necessario utilizzare CoreText o CoreGraphics. Una resa CoreText potrebbe essere simile:
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
if (!self.text)
return;
// create a font
CTFontRef sysUIFont = CTFontCreateUIFontForLanguage(kCTFontSystemFontType, self.fontSize, NULL);
// create attributes dictionary
NSDictionary *attributes = @{
(__bridge id)kCTFontAttributeName : (__bridge id)sysUIFont,
(__bridge id)kCTForegroundColorAttributeName : (__bridge id)[self.fillColor CGColor],
(__bridge id)kCTStrokeColorAttributeName : (__bridge id)[self.borderColor CGColor],
(__bridge id)kCTStrokeWidthAttributeName : @(-3)
};
// make the attributed string
NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:self.text
attributes:attributes];
// begin drawing
CGContextRef context = UIGraphicsGetCurrentContext();
// flip the coordinate system
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// create CTLineRef
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)stringToDraw);
// figure out the size (which we'll use to center it)
CGFloat ascent;
CGFloat descent;
CGFloat width = CTLineGetTypographicBounds(line, &ascent, &descent, NULL);
CGFloat height = ascent + descent;
CGSize stringSize = CGSizeMake(width, height);
// draw it
CGContextSetTextPosition(context,
(self.bounds.size.width - stringSize.width)/2.0,
(self.bounds.size.height - stringSize.height + descent)/2.0);
CTLineDraw(line, context);
// clean up
CFRelease(line);
CFRelease(sysUIFont);
}
Un'implementazione più completa di quanto sopra può essere trovato nel mio GitHub CoreText Demonstration.
Ecco una semplice implementazione Graphics Core di drawRect
che scrive il testo con un contorno intorno al testo:
@implementation CustomView
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
if (!self.text)
return;
// begin drawing
CGContextRef context = UIGraphicsGetCurrentContext();
// flip the coordinate system
CGContextSetTextMatrix(context, CGAffineTransformMakeRotation(M_PI_4/2.0));
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// write the text
CGContextSelectFont (context, "Helvetica", self.fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode (context, kCGTextFillStroke);
CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextSetLineWidth(context, 1.5);
CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextShowTextAtPoint (context, 40, 100, [self.text UTF8String], [self.text length]);
}
@end
Ciao Rob, Vorrei emulare esattamente ciò che stanno facendo cioè linea fuori bianco confine, ruotare il testo, ecc. Capisco il testo di base, forse un po 'impegnativo con cui lavorare, ma se ho il giusto tutorial o esempio per guidarmi so che questo effetto può essere raggiunto. Sfortunatamente non mi sono imbattuto in un singolo progetto di esempio che possa mostrarmi come farlo. (cercato su Google per 2 giorni prima di postare una domanda qui) –
@ SamBudda Alcuni buoni tutorial includono http://www.cocoanetics.com/2011/01/befriending-core-text/ e http://weblog.invasivecode.com/core -text – Rob
Ho fatto google e ho esaminato questi due tutorial. Immagino che quello di cui ho bisogno è un tutorial/progetto di esempio sul testo di base che mostra come disegnare una scatola attorno al testo principale (come mostrato nella foto) e quando lo trascino o lo aumento o diminuisco, come aumenta o diminuisce anche il testo con nella scatola. Io so come creare il testo principale, è solo una seconda parte del puzzle che sto combattendo con –