Saltar al contenido

Texto en árabe con fuentes personalizadas en iOS

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:

  1. Ir a la de tu proyecto info.plist expediente,
  2. Haga clic derecho y seleccione Add row,
  3. Tipo Fonts provided by application en la nueva fila,
  4. Escriba el nombre de fuente deseado como elementos para este key.

ingrese la descripción de la imagen aquí

  1. Arrastre y suelte el archivo de fuente en el proyecto,
  2. 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!

ingrese la descripción de la imagen aquí

Te invitamos a añadir valor a nuestro contenido informacional dando tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *