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

当使用自动布局时,如何调整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的左侧边缘插入的距离)。

是否可以在不改变视图位置的情况下更改锚点,而该视图是用自动布局的?是否需要使用硬编码值并在每次旋转时编辑约束?我希望不会。

我需要改变锚点,这样当我将转换应用到视图时,我就得到了正确的视觉效果。


摇曳的蔷薇
浏览 629回答 3
3回答

阿晨1998

我找到了一个简单的方法。它适用于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
打开App,查看更多内容
随时随地看视频慕课网APP