Nano Hash - криптовалюты, майнинг, программирование

Проблемы CTLineGetTypographicBounds

Код взят из образца кода SimpleTextInput с небольшой модификацией.

Создайте рамку:

self.font = [UIFont systemFontOfSize:18.f];
CTFontRef ctFont = CTFontCreateWithName((CFStringRef) self.font.fontName, self.font.pointSize, NULL);        
self.attributes = [[NSDictionary dictionaryWithObject:(id)ctFont forKey:(NSString *)kCTFontAttributeName] retain];
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.text attributes:self.attributes];    

_framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedString);

// Create the Core Text frame using our current view rect bounds
UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];
_frame =  CTFramesetterCreateFrame(_framesetter, CFRangeMake(0, 0), [path CGPath], NULL);

строка ниже — это любая строка фрейма (получить по CTFrameGetLines(_frame)):

CGFloat ascent, descent, leading;
CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
CGPoint origin;
CTFrameGetLineOrigins(_frame, CFRangeMake(i, 1), &origin);

Проблемы:

  1. ascent, полученный из CTLineGetTypographicBounds или ctFont, равен 13,860352, а self.font.ascender — 16,860352. Откуда такая разница в 3 балла?
  2. спуск равен 4,139648, интерлиньяж равен 0, поэтому восхождение + спуск + интерлиньяж = 18, но self.font.lineHeight и высота строки, вычисленные путем вычитания начала соседних строк, равны 22. Откуда взялось это расхождение в 4 пункта?
14.06.2011

  • Комментарий о моей награде — хотя диаграмма типа cocoanetics.com/2010/02 /understanding-uifont был бы лучшим ответом, простой ответ на вопрос, заданный an0, уже был бы большой помощью. 13.10.2011
  • Я не знаю, почему UIFont работает так, как он работает, но я могу сказать вам, ради сотрудников Google, что разница в 3 пункта в размерах строк по сравнению с типографскими границами связана с тем, что Core Text массирует метрики строк при вычислении происхождения строк. . По крайней мере, так обстоит дело в OS X ... Условия, которые я еще не выяснил, но я знаю, что 0,2 * (восхождение + спуск) добавляется к восхождению, и как результирующий подъем, так и спуск получают floor(x+0.5)'d, в отдельных шаги с отдельными условиями. Может быть, UIFont учитывает эти изменения внутри компании? 06.01.2017
  • В любом случае, я предполагаю, что мы должны просто предположить, что размер CTFrame не является суммой его CTLines. Я не знаю, указано ли это где-либо прямо. 06.01.2017

Ответы:


1

http://developer.apple.com/library/mac/#documentation/TextFonts/Conceptual/CocoaTextArchitecture/TypoFeatures/TextSystemFeatures.html прочитайте этот документ, и вы узнаете, как рассчитывается высота строки, но я до сих пор не понимаю, почему CTLineGetTypographicBounds имеет нулевой начальный

31.05.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..