如何更改 CAGradientLayer 色点?
Posted
技术标签:
【中文标题】如何更改 CAGradientLayer 色点?【英文标题】:How to change CAGradientLayer color points? 【发布时间】:2013-12-04 22:51:06 【问题描述】:现在我有一个 GA Gradient 图层,我已经在其中设置了颜色,但我想将颜色点设置为(而不是顶部中心,到左上角)和底部(而不是底部中心)右下角)只是为了稍微改变一下。想法?下面是我目前得到的代码......我包含了核心动画,因为我是颜色之间的动画。
- (id)init
self = [super init];
UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.w, self.h)];
[self addSubview:gradientView];
[self sendSubviewToBack:gradientView];
topColor = [UIColor colorWithRed:0.012 green:0.012 blue:0.012 alpha:1];
bottomColor = [UIColor colorWithRed:1.000 green:0.765 blue:0.235 alpha:1];
gradient = [CAGradientLayer layer];
gradient.frame = gradientView.frame;
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];
[gradientView.layer addSublayer:gradient];
[self performSelector:@selector(animateColors) withObject:self afterDelay:2.0];
currentColorCount = 1;
return self;
右边(我拥有的)左边(我想要的)
【问题讨论】:
你不是说:左边(我有的)右边(我想要的),因为默认开始是 0.5, 0.0 而默认结束是 0.5, 1.0 【参考方案1】:CAGradientLayer
的startPoint
和endPoint
属性在“单位坐标系”中定义。在单位坐标系中:
(0,0)
对应于图层边界矩形的最小坐标,在 ios 上是其左上角,除非图层已被转换;
(1,1)
对应于图层边界矩形的最大坐标,在 iOS 上是它的右下角,除非图层已被转换。
因此,按照您想要的方式排列渐变应该很简单:
gradient.startPoint = CGPoint.zero
gradient.endPoint = CGPoint(x: 1, y: 1)
【讨论】:
为什么CAGradientLayer
的头文件说的是[0,0] is the bottom-left corner of the layer, [1,1] is the top-right corner
?
我猜这些cmets是基于macOS / AppKit布局编写的,默认情况下原点在左下角。以上是关于如何更改 CAGradientLayer 色点?的主要内容,如果未能解决你的问题,请参考以下文章
如何像屏幕保护程序一样更改 CAGradientLayer 的颜色?