我对一些Core Animation图层的布局有一些复杂的要求。基本上,我有两层,有CGImage内容,需要调整大小(保留它们的宽高比),但也要在它们的父层中间紧挨着彼此。我在下面说明了这一点。
(我的两个插图都显示了A层和B层图像内容的界限。如果图层本身的尺寸更大则无关紧要。)
我到目前为止最接近的是,使用CAConstraintLayoutManager是为了让它们正确缩放,但是以超级层的一半为中心(下图)。
我通过以下代码了解到这一点:
layerA.contentsGravity = kCAGravityResizeAspect;
[layerA setConstraints:[NSArray arrayWithObjects:
[CAConstraint constraintWithAttribute:kCAConstraintMinX relativeTo:@"superlayer" attribute:kCAConstraintMinX],
[CAConstraint constraintWithAttribute:kCAConstraintMaxX relativeTo:@"superlayer" kcaConstraintMidX],
[CAConstraint constraintWithAttribute:kCAConstraintMinY relativeTo:@"superlayer" attribute:kCAConstraintMinY],
[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY],
nil]];
layerB.contentsGravity = kCAGravityResizeAspect;
[layerB setConstraints:[NSArray arrayWithObjects:
[CAConstraint constraintWithAttribute:kCAConstraintMinX relativeTo:@"superlayer" attribute:kCAConstraintMidX],
[CAConstraint constraintWithAttribute:kCAConstraintMaxX relativeTo:@"superlayer" kcaConstraintMaxX],
[CAConstraint constraintWithAttribute:kCAConstraintMinY relativeTo:@"superlayer" attribute:kCAConstraintMinY],
[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY],
nil]];
如何调整两个图层的大小,并对齐它们?
我想到的一个想法是创建一个包含A和B的图层,布局正确,边缘没有边距,然后进行缩放。不过,我无法想办法做到这一点。
答案 0 :(得分:0)
我仍然愿意接受更好的答案,但我创建了自己的CALayoutManager
子类,它实现了一个自定义-layoutSublayersOfLayer
,将子图层的帧精确放置在我想要的位置。我还制作了+layoutManager
方法,因此我的自定义布局管理器可以简单地换成CAConstraintLayoutManager
。