gpt4 book ai didi

cocoa - 如何对齐图像 CALayer 并调整其大小?

转载 作者:行者123 更新时间:2023-12-03 16:47:59 24 4
gpt4 key购买 nike

我对几个核心动画层的布局有一些复杂的要求。基本上,我有两个带有 CGImage 内容的图层,需要调整大小(保留其纵横比),但也紧贴在其父图层的中间。我在下面对此进行了说明。

(我的两个插图都显示了图层A和图层B的图像内容的边界。图层本身的尺寸是否更大并不重要。)

Desired Layout

到目前为止,我使用 CAConstraintLayoutManager 得到的最接近结果是让它们正确缩放,但以 super 层的一半为中心(如下)。

Current, incorrect, layout

我用下面的代码让他们达到这一点:

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 的图层,正确布局,边缘没有边距,然后对其进行缩放。但我也想不出办法做到这一点。

最佳答案

我仍然愿意接受更好的答案,但我创建了自己的 CALayoutManager 子类,它实现了自定义 -layoutSublayersOfLayer 将子层的框架准确放置在我想要的位置要他们。我还创建了一个 +layoutManager 方法,这样我的自定义布局管理器就可以简单地替换为 CAConstraintLayoutManager

关于cocoa - 如何对齐图像 CALayer 并调整其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com