Encontramos la contestación a este contratiempo, al menos eso esperamos. Si tienes dudas dínoslo, que con gusto te responderemos
Solución:
Actualizar:
A partir de iOS 7, realmente no necesita usar Core Text para representar una fuente árabe personalizada. Puedes usar UILabel
y/o UITextView
con NSAttributedString
. Los resultados son los mismos que obtiene usando Core-Text. Sin embargo, dependiendo de sus requisitos, usar Core Text aún puede ser una mejor opción.
Actualizar:
Informé esto como un error a Apple, pero no estoy seguro de cuándo agregarán soporte para fuentes árabes. Actualmente, no hay una manera fácil de hacerlo. Terminé usando la fuente predeterminada del sistema, que no es muy buena.
Mensaje original
Logré crear una aplicación Corán que usa una fuente árabe personalizada. Utilicé fuentes árabes conocidas con Core Text
estructura para obtener los resultados deseados. Puede ver los resultados que obtuve al final revisando la aplicación Quran Presenter para iPad, que está disponible en la App Store.
Aquí hay un código de muestra para ayudarte:
- (CTFontRef)newCustomFontWithName:(NSString *)aFontName
ofType:(NSString *)type
attributes:(NSDictionary *)attributes
NSString *fontPath = [[NSBundle mainBundle] pathForResource:aFontName ofType:type];
NSData *data = [[NSData alloc] initWithContentsOfFile:fontPath];
CGDataProviderRef fontProvider = CGDataProviderCreateWithCFData((CFDataRef)data);
[data release];
CGFontRef cgFont = CGFontCreateWithDataProvider(fontProvider);
CGDataProviderRelease(fontProvider);
CTFontDescriptorRef fontDescriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)attributes);
CTFontRef font = CTFontCreateWithGraphicsFont(cgFont, 0, NULL, fontDescriptor);
CFRelease(fontDescriptor);
CGFontRelease(cgFont);
return font;
- (CATextLayer *)customCATextLayer
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:24.f], (NSString *)kCTFontSizeAttribute,
[NSNumber numberWithInt:1], (NSString *)kCTLigatureAttributeName,
nil];
CTFontRef font = [self newCustomFontWithName:@"PDMS_Saleem_QuranFont-signed"
ofType:@"ttf"
attributes:attributes];
CATextLayer *normalTextLayer = [[CATextLayer alloc] init];
normalTextLayer.font = font;
normalTextLayer.string = NSLocalizedString(@"Sample", nil);
normalTextLayer.wrapped = YES;
normalTextLayer.foregroundColor = [[UIColor blackColor] CGColor];
normalTextLayer.fontSize = 24.f;
normalTextLayer.alignmentMode = kCAAlignmentCenter;
normalTextLayer.frame = CGRectMake(0.f, 10.f, 320.f, 32.f);
CFRelease(font);
return [normalTextLayer autorelease];
- (void)viewDidLoad
[super viewDidLoad];
CATextLayer *normalTextLayer = [self customCATextLayer];
[self.customView.layer addSublayer:normalTextLayer];
Tenga en cuenta que estoy usando CATextLayer
y CTFontRef
. Hay algunos problemas con este enfoque. 1. Tendrá que vivir con los problemas en la “fuente árabe personalizada” seleccionada. 2. Tendrá que usar el texto en árabe que usa los caracteres extendidos admitidos por la fuente.
HH.
Estas clases harán el trabajo:
https://github.com/Accorpa/Arabic-Converter-From-and-To-Arabic-Presentation-Forms-B
¡Descárgalos y estoy bastante seguro de que eso responde a tu pregunta porque tuve exactamente el mismo problema antes!
Un ejemplo del código:
ArabicConverter *converter = [[ArabicConverter alloc] init];
NSString* convertedString = [converter convertArabic:@"منذ دقيقة"];
infoText.font = [UIFont fontWithName:@"YOUARABICFONT" size:16];
infoText.text = convertedString;
Ahora infoText mostrará la fuente correctamente 🙂
Empecé a aprender sobre el desarrollo de iOS a mediados de 2012, y he estado buscando en Internet para encontrar una solución adecuada para las fuentes persas personalizadas en el iPhone, y nunca pude encontrar una solución adecuada. Hubo un Core Text
biblioteca probé una vez, y no siempre funcionó bien, especialmente que tienes que hacer un adicional subview
para agregar su texto con la fuente personalizada en él. Probé el Arabic Converter
hace un tiempo y funcionó bien, pero con el nuevo Xcode no estaba haciendo ningún cambio en el texto, excepto en las vistas web, ¡y solo funcionó mal!
Así que… De todos modos, me alegro de que Apple esté resolviendo problemas para admitir más idiomas. Ahora aquí está la solución muy simple que funciona perfectamente bien:
- Ir a la de tu proyecto
info.plist
expediente, - Haga clic derecho y seleccione
Add row
, - Tipo
Fonts provided by application
en la nueva fila, - Escriba el nombre de fuente deseado como elementos para este key.
- Arrastre y suelte el archivo de fuente en el proyecto,
- Aplícalo al texto que quieras:
UITextView *persianText;
persianText.text = @"در جستجوی قهرمان نباشید nبلکه خود قهرمان شوید";
persianText.font = [UIFont fontWithName:@"IranNastaliq" size: 12.0];
¡Anuncio…! Construye y ejecuta… ¡Tadaaa! ¡Funciona!
Te invitamos a añadir valor a nuestro contenido informacional dando tu veteranía en las aclaraciones.