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


Я хотел бы рисовать карты на экране, которые имеют небольшое количество текста, когда они выложены, больше текста, когда они увеличены, и в идеале анимируются от одной настройки к другой, как jQuery(...).show('slow');. Начальное состояние слегка поворачивается с помощью аффинного преобразования; я хотел бы, чтобы оно вращалось и расширялось до увеличенного вида.

Я видел документацию по адресу: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Operations/Operations.html#//apple_ref/doc/uid/TP40005533-CH4-SW1, но я хочу что-то более низкого уровня. Я хочу, в соответствии с адаптивным программированием, увеличивать масштаб и постепенно раскрывать больше информации в соответствии с сортировкой; поэтому идентификационный номер может появиться сверху, когда он уменьшен, затем "JS" под ним на своей собственной линии, расширяясь до "J Smith", если / когда карта достаточно широка, и "Jane Смит", Если все будет увеличено. Вместо того, чтобы устанавливать больше карт для iPad и iPhone, примерно одинаковое количество карт поместится на одном дисплее в любом случае, но дисплей iPad будет отображать большие карты, которые будут включать больше информации, если не увеличивать масштаб.

Существует ли какая-либо функция, которая может принимать строку, идентификатор шрифта и размер шрифта и возвращать ширину строки на сколько пикселей? Я знаю, что обычно это ошибка-управлять тем, что уже низкоуровнево в основном тексте Программирование, но я хочу тщательно подобранный адаптивный дизайн, который оптимизирован для iPhone small, iPad small, увеличен, и все, что будет происходить между ними, с постепенным раскрытием и сортировкой информации.

1 2

1 ответ:

Да. Для pre-iOS7 (устаревшего в iOS7) см. Метод NSStrings (и его другие варианты)

- (CGSize)sizeWithFont:(UIFont *)font

Для iOS7 (и + вероятно)

- (CGSize)sizeWithAttributes:(NSDictionary *)attrs

Пример кода:

CGSize drawnSize = [myString sizeWithFont:myFont];