voz texto por poner para mac dictado como comandos activar iphone

por - como poner texto en imovie iphone



iPhone-Cómo dibujar texto en medio de un rect (6)

¿Hay un método para dibujar texto en el centro de un rectángulo. Puedo encontrar varias alineaciones, pero nada de lo que he intentado puede centrar verticalmente el texto en un rect.

¿Hay un método simple para hacer esto, o hay alguna manera de centrar un rectángulo y luego dibujar en eso?

Estoy dibujando directamente al CGContext, tratando de usar NSString :: drawWithRect o algo similar, ya que no quiero tener que agregar una etiqueta solo para representar un texto básico.


Aquí hay una versión actualizada para iOS7.0 +.

También he mejorado la respuesta anterior mediante el uso del método sizeWithAttributes: que devuelve los límites del texto y le permite sizeWithAttributes: correctamente antes de dibujarlo. Esto elimina la necesidad de codificar cualquier ajuste que se rompa si usa una fuente de tamaño diferente o si usa una fuente diferente.

- (void) drawString: (NSString*) s withFont: (UIFont*) font inRect: (CGRect) contextRect { /// Make a copy of the default paragraph style NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; /// Set line break mode paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; /// Set text alignment paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *attributes = @{ NSFontAttributeName: font, NSForegroundColorAttributeName: [UIColor whiteColor], NSParagraphStyleAttributeName: paragraphStyle }; CGSize size = [s sizeWithAttributes:attributes]; CGRect textRect = CGRectMake(contextRect.origin.x + floorf((contextRect.size.width - size.width) / 2), contextRect.origin.y + floorf((contextRect.size.height - size.height) / 2), size.width, size.height); [s drawInRect:textRect withAttributes:attributes]; }


En iOS 6 obtienes cadenas de texto y alineaciones de párrafos, por lo que esto se vuelve mucho más directo y poderoso. En este ejemplo, dibujamos una gran "A" roja en el centro de un rectángulo:

NSMutableParagraphStyle* p = [NSMutableParagraphStyle new]; p.alignment = NSTextAlignmentCenter; NSAttributedString* bigA = [[NSAttributedString alloc] initWithString:@"A" attributes:@{ NSFontAttributeName: [UIFont fontWithName:@"Georgia" size:100], NSForegroundColorAttributeName: [UIColor redColor], NSParagraphStyleAttributeName: p }]; [bigA drawInRect:CGRectMake(0,0,200,200)];


Estoy de acuerdo con la respuesta de amagrammer, excepto por un pequeño cambio: uso font.lineSize para obtener la altura adecuada. Supongo que sizeWithFont le dará el tamaño de línea


He encontrado que este código funciona bastante bien:

NSString *text = @"A bit of text to draw"; UIFont *font = [UIFont systemFontOfSize:12]; CGRect textFrame = (CGRect) { .size.width = 150, .size.height = 150, }; CGSize textSize = [text sizeWithFont:font constrainedToSize:textFrame.size lineBreakMode:NSLineBreakByWordWrapping]; CGRect newTextFrame = CGRectInset(textFrame, 0, (textFrame.size.height - textSize.height) / 2); [text drawInRect:newTextFrame withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];

El texto, la fuente y el marco que contiene pueden provenir de cualquier lugar, así que solo use el mismo modo de salto de línea cuando haga el cálculo y el dibujo.


Swift 4.2

static func draw(_ text: String, _ rect: CGRect, _ font: UIFont) { let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .center let attributes = [ NSAttributedString.Key.paragraphStyle: paragraphStyle, NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor.red ] NSAttributedString(string: text, attributes: attributes).draw(in: rect.insetBy(dx: 0, dy: (rect.height - font.pointSize)/2)) }


Bueno, la propiedad de fuente pointSize corresponde directamente a la altura en píxeles de una NSString dibujada en ese UIFont , por lo que su fórmula sería algo como esto:

- (void) drawString: (NSString*) s withFont: (UIFont*) font inRect: (CGRect) contextRect { CGFloat fontHeight = font.pointSize; CGFloat yOffset = (contextRect.size.height - fontHeight) / 2.0; CGRect textRect = CGRectMake(0, yOffset, contextRect.size.width, fontHeight); [s drawInRect: textRect withFont: font lineBreakMode: UILineBreakModeClip alignment: UITextAlignmentCenter]; }

UITextAlignmentCenter maneja el centrado horizontal , por lo que usamos el ancho completo de contextRect. El lineBreakMode puede ser lo que quieras.