Вычисляя область, ограничительный прямоугольник и вставку

NSTextContainer область объекта определяется ограничительным прямоугольником, система координат которого запускается в (0,0) в верхнем левом углу. Размер этого прямоугольника возвращается containerSize метод и использование набора setContainerSize:. Можно определить область контейнера так, чтобы это всегда была та же форма, такая как круг, диаметр которого является более узкими из размерностей ограничительного прямоугольника, или можно определить область относительно ограничительного прямоугольника, такого как овальная область, соответствующая в ограничительном прямоугольнике (и это - круг, когда ограничительный прямоугольник является квадратным). Независимо от текстовой формы контейнера, NSTextView всегда получение клипов к его ограничительному прямоугольнику. Рисунок 1 иллюстрирует эти аспекты текстового контейнера.

  Текстовая область контейнера рисунка 1, ограничительный прямоугольник и вставка
Text container region, bounding rectangle, and inset

Подкласс NSTextContainer определяет его область путем переопределения трех методов. Первое, isSimpleRectangularTextContainer, указывает, является ли область в настоящее время неповернутым прямоугольником, таким образом позволяя NSLayoutManager оптимизировать расположение текста (так как контейнеры пользовательского текста обычно определяют более сложные области, Ваша реализация этого метода, вероятно, возвратится NO). Второй метод, containsPoint:, используется для тестирования событий от нажатия мыши и определяет, находится ли данная точка в области. Третий метод, lineFragmentRectForProposedRect:sweepDirection:movementDirection:remainingRect:, используется для фактического расположения текста, определяя область с точки зрения прямоугольников, доступных для откладывания текста. Этот процесс описан в Генерации Фрагмента Строки

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

Обратите внимание на то, что текстовая вставка контейнера не полностью определяет позицию контейнера в текстовом представлении. Текстовое представление вычисляет позицию текстового контейнера в нем, и это пытается поддержать сумму пространства, данного текстовой вставкой контейнера, но в зависимости от относительных размеров текстового представления и текстовый контейнер, который может не быть возможным. Также возможно, что существует больше пространства, которое будет распределено, чем указанный текстовой вставкой контейнера. Если Вы хотите определить истинное расположение текстового контейнера — например, преобразовать между контейнером и координатами представления — необходимо использовать textContainerOrigin метод, который является фактическим значением, вычисленным текстовым представлением.