【发布时间】:2015-05-06 17:16:57
【问题描述】:
CAGradientLayer 有两个属性 startPoint 和 endPoint。这些属性是根据单位坐标空间定义的。结果是,如果我有两个具有相同起点和终点且边界不同的渐变层,这两个渐变将是不同的。
CAGradientLayer 层的startPoint 和endPoint 如何不根据单位坐标空间而是根据标准点坐标来定义,以便渐变的角度/大小不受边界的影响层?
理想的结果是渐变层可以调整为任何大小或形状,并且渐变保持在原位,尽管裁剪不同。
资格:
我知道这似乎是坐标空间之间的一个绝对微不足道的转换,但显然,是的,我实际上就是那么愚蠢,或者CAGradientLayers 的工作方式可能存在一些问题或非常违反直觉。我没有提供我期望的正确方法的示例,因为(假设我只是愚蠢)它只会误导。
编辑:
这是我对 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。层的梯度都是不同的。
【问题讨论】:
-
结果如何?
标签: ios objective-c cocoa core-animation cagradientlayer