вертикальное выравнивание текста в CATextLayer?

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

Краткий обзор? Ад да. Класс? Нет.

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

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

23
задан William Jockusch 22 January 2011 в 01:51
поделиться

1 ответ

Нет ничего мешающего Вам создать иерархию CALayer с универсальным CALayer (контейнер), который имеет CATextLayer как подуровня.

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

let container = CALayer()
let textLayer = CATextLayer()

// create the layer hierarchy
view.layer.addSublayer(container)
container.addSublayer(textLayer)

// Setup the frame for your container
...


// Calculate the offset of the text layer so that it is centred
let hOffset = (container.frame.size.height - textLayer.frame.size.height) * 0.5

textLayer.frame = CGRect(x:0.0, y: hOffset, width: ..., height: ...)

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

0
ответ дан 29 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: