Пользовательский арабский шрифт в iOS - PullRequest
7 голосов
/ 11 сентября 2010

Я пытаюсь создать приложение для iphone, которое отображает в основном контент на арабском языке. Я хочу использовать собственный арабский шрифт для отображения этого содержимого, а не арабский шрифт iPhone по умолчанию. Я использовал следующий код:

- (void)viewDidLoad {
    [super viewDidLoad];
    [arabicLabel setFont: [UIFont fontWithName: @"Simple Indust Shaded" size: 20]];
    arabicLabel.text = @"السلام عليكم";
}

, где arabicLabel - это IBOutlet UILabel. Я поместил метку в ресурсы приложения и добавил ее в файл info.plist как элемент массива UIAppFont. Также шрифт Unicode .

Когда я запускаю этот код на симуляторе, метка отображает арабский шрифт по умолчанию (не мой собственный шрифт); однако его размер равен 20, как указано в коде!

Я не понимаю, что я сделал не так здесь ... Я знаю, что в файле info.plist я должен добавить имя файла шрифта с расширением (ttf), и я сделал это. Кроме того, я знаю, что в предыдущем коде мне нужно было указать фактическое имя шрифта, а не имя файла, поэтому я открыл файл на своем Mac и использовал заголовок, который появлялся при открытии файла (Simple Indust Shaded).

Я что-то упустил? Существуют ли какие-либо дополнительные требования для пользовательских шрифтов, кроме Unicode?

NB. Я проделал ту же процедуру для обычного английского шрифта, и она сработала! ...

Ответы [ 2 ]

10 голосов
/ 06 декабря 2010

Краткий ответ

Это похоже на ошибку в iOS.

Длинный ответ

Как вы, возможно, знаете, арабский текст должен быть сформирован, прежде чем он может быть отображен, что означает преобразование основных букв ( Unicode: 0600-06FF ) в соответствующие им соответствующие контекстные буквы ( Unicode:. FE70-FEFF )

iOS выполняет эту предварительную обработку автоматически для арабского текста, но по какой-то причине она забывает о пользовательском шрифте и просто использует системный шрифт по умолчанию при визуализации подключенных букв.

Итак, это ошибка в iOS, и вам следует дождаться ее устранения.

Обход

Хотя, если вы не можете ждать, вы можете использовать этот обходной путь: Выполните предварительную обработку текста вручную перед его обработкой . Это позволит пропустить фазу предварительной обработки iOS, которая вызывает эту проблему, и, таким образом, отобразить текст, используя ваш собственный шрифт.

Если вы хотите протестировать это решение, просто скопируйте следующую строку и попробуйте в своем проекте:

arabicLabel.text = @"ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ";
2 голосов
/ 13 января 2014

ЭТО ОТВЕТ ДЛЯ НИЖЕ IOS 7.

Я также прошел через эту ситуацию: вы можете создать свой собственный метод карты хеш-функции для замены символа 0600-06ff на ваш собственный шрифт, но для этого вам нужнопроверьте, сопоставлен ли ваш глиф в TTF с 0600-06FF, чем нужно изменить юникод, сопоставленный с вашим глифом, за исключением 0600-06ff

, например, если я сделал TTF и сопоставил 'و' с юникодом 0627, и когдая пытаюсь увидеть эффект напечатанного символа unicode 0627, т. е. (когда я набираю 'ا', он должен показывать 'و'), он не будет применять мое собственное изображение к нему, потому что ios6 не позволит вам изменять глиф в определенном диапазоне.но если бы я сопоставил этот пользовательский символ с серией Fxxx или иным, чем 0600-06ff, он легко позволил бы мне сделать пользовательское изменение

арабский (0600—06FF, 255 символов), вы не можете играть в этом диапазоне илиизмените изображение этого символа глифа на свое собственное изображение, чтобы сопоставить свой глиф с приведенным ниже арабским дополнением в юникоде арабского дополнения (0750—077F, 48 символов) арабского расширенного-A (08A0—08FF, 39 символов) арабского представления форм-A (FB50—FDFF, 608 символов) Формы представления арабского языка-B (FE70 — FEFF, 140 символов)

Здесь приведена ссылка на аналогичные действия, выполненные с использованием пользовательского арабского класса, и я также получил от него помощь арабскийкласс пользовательских шрифтов

...