Основываясь на прочтении документации, подкрепленной некоторыми знаниями об обработке шрифтов в целом, но не Core Text, я бы сказал, что это возможно, но это не так просто.
Документация CTFontCreateCopyWithSymbolicTraits()
указывает, что параметры symTraitValue
и symTraitMask
имеют тип CTFontSymbolicTraits
. Документация CTFontDescriptor()
определяет значение "Bold", которое вы используете как
kCTFontBoldTrait = (1 << 1)
Так что это явно булева черта. Однако, как вы видели, вес шрифта является спектром, а не булевой характеристикой, хотя десятилетия «жирных» кнопок в пользовательском интерфейсе текстового процессора представляли его как булеву характеристику. CTFontCreateCopyWithSymbolicTraits()
не обладает необходимой вам выразительной силой.
Еще один подход, который может сработать, это попытаться позвонить CTFontDescriptorCreateMatchingFontDescriptors()
. Вы передаете эту функцию CTFontDescriptorRef
исходному шрифту и CFSetRef
с атрибутами, которые должны присутствовать. Эта функция возвращает массив дескрипторов шрифтов, каждый из которых соответствует запрашиваемым атрибутам.
Таким образом, вы можете передать ему CTFontDescriptorRef
для Myriad Pro Regular и, возможно, CFSetRef
, заявив, что вы хотите выделить жирным шрифтом, а затем просмотреть каждый дескриптор шрифта в возвращенном массиве, чтобы найти тот, который имеет наибольший вес.
Я не написал этот код, и мое незнание основного текста означает, что я могу что-то упустить, но это выглядит как правдоподобный подход.