gpt4 book ai didi

html - iOS 中带有自定义字体的阿拉伯语文本

转载 作者:太空狗 更新时间:2023-10-29 14:43:25 26 4
gpt4 key购买 nike

我正在开发一个需要使用自定义阿拉伯字体显示阿拉伯文本的应用程序。问题是我无法使用自定义 阿拉伯语字体显示阿拉伯语文本。我尝试在 UILabel、UITextField、UITextView、UIWebView、FontLabel(由 Zynga 提供)和使用 CoreText 中显示文本。

您可以在此处找到示例项目:

Sample application using UILabel, UITextField, UITextView and CoreText

Sample application using UIWebView (HTML)

Sample application using UIWebView (HTML): You'll have to install the fonts in the sample project. You can then compare the results and see the problem by running the application in the simulator (or iPad), and opening Sample.html file in the browser (Safari).

我已经在 Apple 的开发者论坛上发布了一些详细信息,但我一直发现 stackoverflow 比 Apple 的官方开发者论坛活跃得多。这是该帖子的链接:

Using custom arabic font in iOS

我做错了什么?

注意:字体已正确加载到系统中,我可以成功地将自定义字体应用于常规(英文)文本。

附注stackoverflow 上有几篇帖子讨论了这个主题,但都没有太大帮助,所以我发布了一个新问题。

最佳答案

更新:

从 iOS 7 开始,您实际上不需要使用 Core Text 来呈现自定义阿拉伯语字体。您可以将 UILabel 和/或 UITextViewNSAttributedString 一起使用。结果与使用 Core-Text 得到的结果相同。但是,根据您的要求,使用 Core Text 仍然是更好的选择。

更新:

我已将此作为错误报告给 Apple,但我不确定他们何时会添加对阿拉伯字体的支持。目前,没有简单的方法可以做到这一点。我最终使用了默认的系统字体,这不是很好。

原始消息

我确实设法构建了一个使用自定义阿拉伯语字体的古兰经应用程序。我将已知的阿拉伯语字体与 Core Text 框架结合使用以获得所需的结果。你可以通过查看应用程序看到我最后得到的结果 Quran Presenter for iPad ,可在 App Store 获取。

这里有一些示例代码可以帮助您解决问题:

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

请注意,我正在使用 CATextLayerCTFontRef。这种方法存在一些问题。1. 您将不得不忍受所选“自定义阿拉伯语字体”中的问题。2. 您必须使用使用字体支持的扩展字符的阿拉伯文文本。

HTH.

关于html - iOS 中带有自定义字体的阿拉伯语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com