Old*_*ame 3 identity transform objective-c uiview cgaffinetransform
是否可以将转换标识设置为当前转换状态?我关注的是使用自动布局,并且一旦应用了转换,框架现在是未定义的.这只是一个抽象的思维过程,实际上可能不是一个问题.
假设我应用了一个CGAffineTransformMakeScale(1,-1)翻转UIView一个超级视图的子视图.现在我已经将一个转换应用于subView框架:现在变得未定义,那么如果我调整superView的尺寸,那将如何影响superView中subView的大小和位置?
我的思维过程告诉我,如果我可以将"CGAffineTransformIdentity"设置为当前转换状态(例如在翻转或旋转之后),我设置的任何自动布局都将被正确处理,但如果没有设置,我将无法获得适当的自动布局处理.
所以我需要担心框架:未定义或自动布局是否使用转换视图的边界:?
好问题.在应用不等于的变换后frame,a的UIView变为未定义CGAffineTransformIdentity是正确的:
...如果
transform属性包含非标识转换,则frame属性的值是未定义的,不应修改.在这种情况下,您可以使用center属性重新定位视图,并使用属性调整大小bounds.
但是,您可能不知道" 自动布局"实际上并未使用frame视图对齐它,而是使用视图的"对齐矩形".使用查找视图的对齐rect alignmentRectForFrame:.
文档指出
默认实现[of
alignmentRectForFrame:]返回由视图frame修改的视图alignmentRectInsets.
并详细说,
大多数自定义视图都可以覆盖
alignmentRectInsets以指定其内容在其框架内的位置.需要任意转换的自定义视图可以覆盖alignmentRectForFrame:并frameForAlignmentRect:描述其内容的位置.这两种方法必须始终相互反转.
那么,回答你的问题,
所以我需要担心框架:未定义或自动布局是否使用转换视图的边界:?
答案是,在一般情况下,你将不得不实施alignmentRectForFrame:和frameForAlignmentRect:,并确保他们是彼此的逆.
这是对问题的更彻底的处理,我建议你看看.
| 归档时间: |
|
| 查看次数: |
1824 次 |
| 最近记录: |