Вопрос по calayer, frame, bounds, ios – CALayer frame.size не равен bounds.size

3

Я столкнулся с чем-то странным для меня в CALayer. И, наконец, обнаружил, что frame.size CALayer не равен его bounds.size, что я не могу понять. Я знаю, что frame находится в системе координат супер, и bounds - это его. собственная координата, и обычный случай: frame.origin не равен bounds.origin, но frame.size равен bounds.size.

Преобразование на супер слой и себя keywind
Вы применили и трансформировались на подвид? как вращение? dhilipsiva

Ваш Ответ

1   ответ
7

Это потому, что вы применили преобразование, как говорит apple в документации по свойству frame.

Warning If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.

...

Changes to this property can be animated. However, if the transform property contains a non-identity transform, the value of the frame property is undefined and should not be modified. In that case, you can reposition the view using the center property and adjust the size using the bounds property instead.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

Если у вас не применено преобразование, тогда начало координат может быть другим, но размер должен оставаться таким же, как и при повторной настройке одного.

The size of the bounds rectangle is coupled to the size of the frame rectangle, so that changes to one affect the other.

Да, я понимаю. Поскольку я масштабирую 2x, поэтому границы также отображаются 2x. например, размер (100 100) будет отображаться как размер (200 200) keywind
он использует свойство center, в этом случае вы можете изменить положение представления, используя свойство center, и отрегулировать размер, используя свойство bounds. & quot; все это в документации. И это имеет смысл, когда вы вращаете что-то «квадрат» содержащий его должен расти, поэтому границы определяют размер внутреннего квадрата и каркас содержащего квадрата.
Вам не нужно игнорировать кадр, когда слой преобразуется. Фактически, фрейм просто представляет самый маленький прямоугольник, который полностью содержит преобразованный слой, что полезно. Границы остаются неизменными независимо от преобразования. Таким образом, они представляют собой просто два разных представления координатного пространства, в зависимости от того, что вас интересует.
Если значение фрейма не определено и поэтому должно игнорироваться, то как система решает, где нарисовать слой. На самом деле, меня смущает то, что мой слой всегда больше, чем слой bounds.size. keywind

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