gpt4 book ai didi

ios - `CAGradientLayer` 根据局部坐标空间定义起点和终点

转载 作者:行者123 更新时间:2023-11-29 02:03:29 24 4
gpt4 key购买 nike

CAGradientLayer 有两个属性startPointendPoint。这些属性是根据单位坐标空间定义的。结果是,如果我有两个具有相同起点和终点且每个边界不同的渐变层,则这两个渐变将不同。

CAGradientLayer 层的 startPointendPoint 如何不根据单位坐标空间而是根据标准点坐标来定义,所以渐变的角度/大小不受图层边界的影响?

期望的结果是渐变层可以调整为任何大小或形状,并且渐变保持在原位,尽管裁剪方式不同。


资格:我知道这似乎是坐标空间之间的一个绝对微不足道的转换,但显然,是的,我实际上是那么愚蠢,或者可能有一些关于 CAGradientLayer 的工作方式的错误或非常违反直觉的东西。我没有包含我期望的正确方法的示例,因为(假设我只是愚蠢)它只会产生误导。


编辑:

这是我对 CALayer 的实现,它添加了一个子 CAGradientLayer 并配置了它的起点和终点。它不会产生预期的结果。

@interface MyLayer ()
@property (nonatomic, strong) CAGradientLayer *gradientLayer;
@end

@implementation MyLayer

- (instancetype)init {
if (self = [super init]) {
self.gradientLayer = [CAGradientLayer new];
[self addSublayer:self.gradientLayer];
self.gradientLayer.colors = @[ (id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];;
self.gradientLayer.locations = @[ @0, @.333, @.666, @1 ];
}
return self;
}

- (void)layoutSublayers {
[super layoutSublayers];
self.gradientLayer.frame = self.bounds;
self.gradientLayer.startPoint = CGPointMake(0, 0);
self.gradientLayer.endPoint = CGPointMake(100 / self.bounds.size.width, 40 / self.bounds.size.height);
}

@end

我有一个 .xib 文件,其中包含许多不同大小的 MyLayer。层的梯度都是不同的。

最佳答案

否则您无法定义 startPoint 和 endPoint。您有两个选择:

  • 根据 View 高度计算(100 像素 View 高度为 50 像素 = 0.5,100 像素 View 高度 = 0.25)

  • 以所需的最大固定大小(例如:高度为 568)创建渐变,并将其添加为另一个 View 的 subview ,该 View 将根据您的需要调整大小,并启用 clipsToBounds。这样,您就可以实现您想要的效果(让渐变始终从顶部开始并剪裁底部,保持渐变居中并剪裁顶部和底部,等等)

关于ios - `CAGradientLayer` 根据局部坐标空间定义起点和终点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083437/

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