es este CoreText? – Aviar text pellizcar ampliar

Estoy buscando hacer una aplicación donde un usuario puede cambiar el tamaño y la orientación de UITextField . Estaba buscando en la aplicación Aviary y lo que veo es que los usuarios no solo pueden boost o disminuir el tamaño del text, sino que también pueden cambiar su orientación.

introduzca la descripción de la imagen aquí

Entonces, las preguntas que quiero hacer son:

1) ¿Están usando CoreText para hacer esto si usan solo UILabel antiguo o UIText ?

2) No sé cómo puedes cambiar el tamaño dinámicamente. ¿Están usando UIView ?

3) Tengo tutoriales en Google CoreText, ejemplos, comprobé documentos de Apple y proyectos de ejemplo, busqué controles de cocoa y github y aún no veo ningún código de muestra o tutorial que muestre cómo se hace esto.

¿Alguien tendría la amabilidad de señalarme en alguna dirección o en un tutorial?

En cuanto a la apariencia de la fuente, hay un par de opciones:

  1. Puede usar la UILabel estándar para lograr la mayoría de los efectos (fuente, tamaño, color, rotation) que ve aquí. La característica más allá de la UILabel estándar es el trazo blanco alnetworkingedor de la fuente. Pero, iOS 6 eficaz, también puede lograr el efecto del trazo blanco alnetworkingedor del text en rojo con una UILabel estándar utilizando su propiedad UILabel attributedText , que es una NSAttributedString .

  2. En las versiones de iOS anteriores a 6.0, para lograr el color de trazo blanco alnetworkingedor del text, tenía que usar CoreGraphics o CoreText .

En cuanto al cambio de tamaño, rotation y movimiento del text, sin duda están usando solo reconocedores de gestos que ajustan la propiedad de transform de la vista (más exactamente, probablemente ajuste la transform para la rotation, ajustando el center o el frame para arrastrar y ajustando ambos el frame y el tamaño de fuente para cambiar el tamaño (si solo usa scale transformación de scale , puede terminar con una pixelación indeseable).

Obtendrás bastantes buenos resultados si buscas Stack Overflow para preguntas relacionadas con los reconocedores de gestos y para arrastrar, cambiar el tamaño y rotar las vistas.


En iOS 6, si desea que el text en rojo con un borde blanco con una UILabel , pueda hacer algo como:

 // create attributes dictionary NSDictionary *attributes = @{ NSFontAttributeName : [UIFont systemFontOfSize:48.0], NSForegroundColorAttributeName : [UIColor networkingColor], NSStrokeColorAttributeName : [UIColor whiteColor], NSStrokeWidthAttributeName : @(-3) }; // make the attributed string NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:@"bigcat" attributes:attributes]; self.label.attributedText = stringToDraw; 

Para get información sobre las cadenas atribuidas en iOS, consulte:

  • WWDC 2012 – # 222 – Introducción a las cadenas atribuidas para iOS

  • WWDC 2012 – # 230 – Cadenas Atribuidas Avanzadas para iOS


Si necesita admitir versiones de iOS anteriores a iOS 6, debe usar CoreText o CoreGraphics. Una representación de CoreText podría ser similar a:

 - (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); } 

Una implementación más completa de lo anterior se puede encontrar en mi GitHub CoreText Demostración .


Aquí hay una implementación Core Graphics muy simple de drawRect que escribe text con un esquema alnetworkingedor del text:

 @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 networkingColor] CGColor]); CGContextShowTextAtPoint (context, 40, 100, [self.text UTF8String], [self.text length]); } @end