我创造了CAGradientLayer三种颜色,我需要给每种颜色不同的位置.例:
Red = 0 to 50 %
Yellow = 51 to 80 %
Green = 81 to 100 %
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我忽略了一些基本的东西,但有什么更好的方法来找到它而不是在互联网上出错?
我有一个相当基本的用户界面.我的视图UIViewController是一个子类,+layerClass是CAGradientLayer.根据用户的操作,我需要移动一些UI元素,并更改背景渐变的值.代码看起来像这样:
[UIView animateWithDuration:0.3 animations:^{
self.subview1.frame = CGRectMake(...);
self.subview2.frame = CGRectMake(...);
self.subview2.alpha = 0;
NSArray* newColors = [NSArray arrayWithObjects:
(id)firstColor.CGColor,
(id)secondColor.CGColor,
nil];
[(CAGradientLayer *)self.layer setColors:newColors];
}];
Run Code Online (Sandbox Code Playgroud)
问题是我在这个块中对子视图所做的更改动画就好了(东西移动和淡化),但渐变颜色的变化却没有.它只是交换.
现在,文档确实说动画块中的Core Animation代码不会继承块的属性(持续时间,缓动等).但是,根本没有定义动画交易吗?(文档的含义似乎是你会得到一个默认动画,我得不到.)
我必须使用显式CAAnimation来完成这项工作吗?(如果是这样,为什么?)
我正在添加CAGradientLayer一个视图.当视图自动调整大小时(例如旋转后),不会调整渐变图层的大小.可以将渐变设置为与视图相同的自动调整大小吗?另请注意,我在视图中使用自动布局约束.
这是我正在做的事情:
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0.0, 0.0, frame.size.width, frame.size.height);
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:255.0/255.0f green:255.0/255.0f blue:255.0/255.0f alpha:1.0f] CGColor],
(id)[[UIColor colorWithRed:233.0/255.0f green:233.0/255.0f blue:233.0/255.0f alpha:1.0f] CGColor], nil];
[self.layer insertSublayer:gradientLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud) 我试图为我添加一个渐变层,UILabel因为某些原因CAGradientLayer覆盖了我的文本.我做错了什么
- (void)viewDidLoad {
[super viewDidLoad];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(0, 0, myLabel.frame.size.width, myLabel.frame.size.height);
gradient.colors = myColors;
[myLabel.layer insertSublayer:gradient atIndex:0];
}
Run Code Online (Sandbox Code Playgroud) 我有一个UIViewController我用它创建背景渐变的地方
CAGradientLayer *gradient = [CAGradientLayer layer];
...
gradient.frame = frame;
self.backGradient = gradient;
[self.view.layer insertSublayer:gradient atIndex:0];
Run Code Online (Sandbox Code Playgroud)
它工作正常,后来我必须将_selectionFrame我的视图控制器的子视图发送回:(
我经常需要发送_selectionFrame到后面和前面,用于动画和绘图目的)
self 是viewController:
[self.view sendSubviewToBack:_selectionFrame];
Run Code Online (Sandbox Code Playgroud)
然而,这发送的_selectionFrame背后gradient.我希望它只是在渐变之上但在每个其他子视图之下.问题是渐变不是视图,所以我不能使用渐变的函数.
我想打个电话[self.view sendSubviewToBack:gradient];
但这不起作用.
我正在尝试使用绘制角度渐变CaGradientLayer.我知道角度可以使用startPoint和定义endPoint.我可以为一些标准角度计算这些点,如0,90,180,360等.但我希望将这些点制定为任意角度.我曾尝试用一些三角函数计算它,但没有取得任何成功.任何人都可以给我任何方向如何计算任意角度的这些点?
我创建了一个新项目.我挂QuartzCore.framework和进口<QuartzCore/QuartzCore.h>的ViewController.m.
这是代码.
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"view height %f", self.view.frame.size.height); // returns 667 on iPhone 6
NSLog(@"view width %f", self.view.frame.size.width); // returns 375 on iPhone 6
NSLog(@"layers count %lu", self.view.layer.sublayers.count); // returns 2
// Gradient
UIColor *colorOne = [UIColor blueColor];
UIColor *colorTwo = [UIColor greenColor];
NSArray *colorArray = @[colorOne, colorTwo];
NSNumber *locationOne = [NSNumber numberWithFloat:0.0];
NSNumber *locationTwo = [NSNumber numberWithFloat:1.0];
NSArray *locationArray = @[locationOne, locationTwo];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.view.frame; …Run Code Online (Sandbox Code Playgroud) 我需要在视图中显示3色分布.所以我正在使用以下代码.
func drawWithGradientLayer() {
// total contains sum of all values contained in segmentValues variable.
// I'm using green -> Orange -> Red colors as colors
if total == 0 {
return
}
if gradientLayer.superlayer != nil {
gradientLayer.removeFromSuperlayer()
}
var previous: CGFloat = (CGFloat(segmentValues[0])/CGFloat(total))
var locations: [NSNumber] = [previous]
for var i=1; i<segmentValues.count; i++ {
previous = previous + (CGFloat(segmentValues[i])/CGFloat(total))
locations.append(previous)
}
locations.append(1.0) // Line may need to be commented
gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height) …Run Code Online (Sandbox Code Playgroud) 我的客户想要背景视图与此渐变效果 背景渐变:rgb(118,118,118)| #ffffff | rgb(198,198,197)线性从左到右 我试过这种方式但它发生在垂直方向我希望它以水平方式
UIColor *leftColor = [UIColor colorWithRed:118.0/255.0 green:118.0/255.0 blue:118.0/255.0 alpha:1.0];
UIColor *middleColor = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0];
UIColor *rightColor = [UIColor colorWithRed:198.0/255.0 green:198.0/255.0 blue:197.0/255.0 alpha:1.0];
// Create the gradient
CAGradientLayer *theViewGradient = [CAGradientLayer layer];
theViewGradient.colors = [NSArray arrayWithObjects: (id)leftColor.CGColor, (id)middleColor.CGColor,(id)rightColor.CGColor, nil];
theViewGradient.frame = self.view.bounds;
//Add gradient to view
[self.view.layer insertSublayer:theViewGradient atIndex:0];
Run Code Online (Sandbox Code Playgroud)
我有一个UITableView在我的小区backgroundView是一个UIImageView.我希望每个图像的顶部都淡入黑色,这样我就可以覆盖一些白色文本.
我已经看过像一些答案这个,但没有一个似乎工作.
在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)我尝试过:
var imageView = UIImageView(image: image)
var gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = imageView.frame
gradient.colors = [UIColor.blackColor(), UIColor.clearColor()]
gradient.locations = [0.0, 0.1]
imageView.layer.insertSublayer(gradient, atIndex: 0)
cell!.backgroundView = imageView
Run Code Online (Sandbox Code Playgroud)
但是,当我删除渐变代码时,我看不到渐变,也没有区别.我的渐变是否位于图像下方?
如果我替换线imageView.layer.insertSublayer(gradient, atIndex: 0),imageView.layer.mask = gradient那么我的细胞只是空白和白色(不再是图像).
cagradientlayer ×10
ios ×9
objective-c ×5
calayer ×3
cocoa-touch ×2
swift ×2
uiview ×2
cocoa ×1
gradient ×1
uiimageview ×1