为了账号安全,请及时绑定邮箱和手机立即绑定

当使用自动布局时,如何调整CALLayer的锚点?

当使用自动布局时,如何调整CALLayer的锚点?

摇曳的蔷薇 2019-06-28 15:27:25
当使用自动布局时,如何调整CALLayer的锚点?自从提出这个问题以来,事情就有了进展,见这里最近的一个很好的概述。在自动布局之前,您可以通过存储框架、设置锚点和恢复框架来更改视图层的锚点,而无需移动视图。在自动布局世界中,我们不再设置框架,但是约束似乎无法完成将视图的位置调整到我们想要的位置的任务。您可以破解这些约束来重新定位视图,但是在旋转或其他调整大小的事件中,这些约束会再次变得无效。由于它创建了“布局属性(左和宽)的无效配对”,下面的好主意不起作用:layerView.layer.anchorPoint = CGPointMake(1.0, 0.5);// Some other size-related constraints here which all work fine...[self.view addConstraint:     [NSLayoutConstraint constraintWithItem:layerView                                  attribute:NSLayoutAttributeLeft                                  relatedBy:NSLayoutRelationEqual                                      toItem:layerView                                   attribute:NSLayoutAttributeWidth                                  multiplier:0.5                                    constant:20.0]];我在这里的目的是在layerView,调整后的锚点的视图,以其宽度的一半加20(从SuperView的左侧边缘插入的距离)。是否可以在不改变视图位置的情况下更改锚点,而该视图是用自动布局的?是否需要使用硬编码值并在每次旋转时编辑约束?我希望不会。我需要改变锚点,这样当我将转换应用到视图时,我就得到了正确的视觉效果。
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

我找到了一个简单的方法。它适用于iOS 8和iOS 9。

例如在使用基于框架的布局时调整锚点:

let oldFrame = layerView.frame
layerView.layer.anchorPoint = newAnchorPoint
layerView.frame = oldFrame

当您使用自动布局调整视图的锚点时,您会做同样的事情,但以约束的方式。当锚点从(0.5,0.5)更改为(1,0.5)时,LayerView将以视图宽度的一半的距离向左移动,因此需要对此进行补偿。

我不理解问题中的约束,因此,假设您使用常量:layerView.centX=SuperView.centX+常量,添加了一个相对于SuperView中心X的中心X约束。

layerView.layer.anchorPoint = CGPoint(1, 0.5)let centerXConstraint = .....centerXConstraint.constant = centerXConstraint.constant + layerView.bounds.size.width/2


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 626 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信