微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – Autolayout旋转轮

我正在尝试使用CGAffineTransformRotate旋转UI ImageView约束,但是视图在旋转时抖动.如果我使用CATransform3DRotate旋转它的图层,则不会发生这种情况,但只要我编辑约束(更改常量),旋转的图像就会跳开.有谁有想法如何解决这个问题?

这是跳过的旋转图像的屏幕截图

解决方法

自动布局作用于UIView的框架.框架根据视图的中心,边界和变换属性计算.认情况下,view.transform只是CGAffineTransformIdentity,在此配置中,框架是一个与superview相同的矩形,其宽度和高度与视图的边界相同.

但是,当您修改view.transform(或等效地,view.layer.transform)时,正如您所做的那样,这会破坏center,bounds和frame之间的可预测关系.例如,如果您的变换是20度旋转,那么框架将不再具有与边界相同的宽度和高度.框架现在(我认为……)任何矩形,与超视图相同,需要包含原来的矩形,现在旋转20度.

由于自动布局会对框架属性起作用,因此现在可能会产生您不想要的布局.

例如,假设您的视图在10×10帧矩形内呈现一个圆,该矩形通过空间约束与超视图左上对齐.然后你旋转45度.旋转的圆圈看起来相同.但现在框架是最小的矩形,一旦旋转就可以包含原始矩形,这个最小的矩形是10 / sqrt(2)x 10 / sqrt(2).当自动布局将左上角对齐应用于此新帧时,您将看到您的圆圈向下移动并向右移动.它不是以{5,5}为视觉中心,而是以{5 / sqrt(2),5 / sqrt(2)}为中心.

我认为解决这个问题的方法是手动调整布局约束“常量”参数以校正变换的效果,或者类似地覆盖alignmentRectForFrame以强制自动布局在alignRect上工作,alignRect经过调整以补偿变换,或者定义原始约束以绑定到视图的中心,这可能不受转换的影响.

原文地址:https://www.jb51.cc/iOS/331069.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐