如何使用CAGradientLayer最有效地围绕圆/角度绘制渐变?
在这个项目的帮助下,我在下面做了一个.它使用位图上下文进行绘制,但CAGradientLayer效率更高.
不幸的是,我只能弄清楚如何用它来制作线性渐变.
我有自定义UIView类在Swift 2中呈现渐变.我正在努力制作一个有角度的渐变,以便从左上角到右下角绘制.有人可以帮我一点吗?
import UIKit
class GradientView: UIView {
let gradientLayer = CAGradientLayer()
override func awakeFromNib() {
// 1
self.backgroundColor = ColorPalette.White
// 2
gradientLayer.frame = self.bounds
// 3
let color1 = ColorPalette.GrdTop.CGColor as CGColorRef
let color2 = ColorPalette.GrdBottom.CGColor as CGColorRef
gradientLayer.colors = [color1, color2]
// 4
gradientLayer.locations = [0.0, 1.0]
// 5
self.layer.addSublayer(gradientLayer)
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这应该是别的,但无论我输入什么都没有变化.
gradientLayer.locations = [0.0, 1.0]
Run Code Online (Sandbox Code Playgroud) 是否可以使用从左到右的渐变创建自定义ui进度视图?
我用以下代码尝试过:
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.frame
gradientLayer.anchorPoint = CGPoint(x: 0, y: 0)
gradientLayer.position = CGPoint(x: 0, y: 0)
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0);
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0);
gradientLayer.colors = [
UIColor.red,
UIColor.green
]
// Convert to UIImage
self.layer.insertSublayer(gradientLayer, at: 0)
self.progressTintColor = UIColor.clear
self.trackTintColor = UIColor.black
Run Code Online (Sandbox Code Playgroud)
但不幸的是,梯度不可见.还有其他想法吗?
我一直试图弄清楚如何向 tableView 添加渐变图层,并尝试了很多不同的东西,但我永远无法让表格视图单元格显示出来,无论我有多少带来的子视图或发送子视图做。
let gradientLayer = CAGradientLayer()
gradientLayer.frame = view.bounds
gradientLayer.colors = [UIColor(red: 125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0).cgColor, UIColor(red: 125/255.0, green: 125/255.0, blue: 255/255.0, alpha: 1.0).cgColor]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
tableView.layer.addSublayer(gradientLayer)
Run Code Online (Sandbox Code Playgroud)
不管带来子视图和发送子视图的组合有多少,我似乎总是得到这个并且单元格不会出现在前面:
有谁知道如何解决这个问题,或者如何做我想做的另一种方式来使它工作?
非常感谢任何帮助,谢谢。
我将图层添加到我的视图中:
[self.layer insertSublayer:_gradient above:_another.layer];
Run Code Online (Sandbox Code Playgroud)
那么即使我在超级层上调用needDisplay,它似乎也不会被删除:
[_gradient removeFromSuperlayer];
Run Code Online (Sandbox Code Playgroud)
我怎样才能删除它?
我正在尝试使用swift应用CAGradientLayer,并且我希望它从黑色渐变为透明。
我以为,将任何颜色与alpha: 0都会呈现相同的“透明”颜色。事实并非如此。白色与alpha: 0仍然有点白色,红色与alpha: 0仍然有点红色...
我不需要任何色彩,只要透明即可。黑色不那么黑,直到没有颜色为止,例如,您可以完全看到其下方的视图。
gradientLayer.colors = [UIColor(hex: 0x000000, alpha: 0.4).cgColor,
UIColor(hex: 0x6D6D6D, alpha: 0.3).cgColor,
UIColor.white.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 0.3, 1.0]
Run Code Online (Sandbox Code Playgroud)
如果将图层应用于灰色图片,则很容易看到它不是透明的而是白色的:
编辑1:
gradientLayer.frame = self.gradientView.bounds
gradientLayer.masksToBounds = true
gradientLayer.colors = [UIColor.black.withAlphaComponent(1.0).cgColor, UIColor.black.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
self.gradientView.layer.addSublayer(gradientLayer)
Run Code Online (Sandbox Code Playgroud)
输出:
我已经查看了类似问题的许多其他答案,但似乎没有一个答案可以解决我的问题,因此寻求一些帮助。
我正在尝试将垂直渐变应用于 UIButton,但渐变层没有显示在我的视图中。这是相关代码:
let darkPurple = UIColor(displayP3Red: 61.0/255.0, green: 3.0/255.0, blue: 110.0/255.0, alpha: 1.0)
let lightPurple = UIColor(displayP3Red: 90.0/255.0, green: 32.0/255.0, blue: 130.0/255.0, alpha: 1.0)
let addButton = UIButton(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
addButton.title = "Start counting"
addButton.layer.cornerRadius = 30.0
addButton.layer.borderWidth = 1.0
addButton.layer.borderColor = darkPurple.cgColor
addButton.translatesAutoresizingMaskIntoConstraints = false
myView.addSubview(addButton)
addButton.applyGradient(with: [lightPurple, darkPurple], gradientOrientation: .vertical)
Run Code Online (Sandbox Code Playgroud)
...以及应用渐变的代码:
typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint)
enum GradientOrientation {
case topRightBottomLeft
case topLeftBottomRight
case horizontal
case vertical
var startPoint: …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个渐变背景的UIButton.我选择时工作正常,但按钮不突出显示(默认行为是按钮变暗).
这是我的按钮:
-(UIButton *)createLoginButtonForSize:(CGSize)size {
UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
loginButton.translatesAutoresizingMaskIntoConstraints = FALSE;
loginButton.layer.cornerRadius = 8;
loginButton.titleLabel.text = @"Login";
[loginButton addTarget:self action:@selector(loginCheck:) forControlEvents:UIControlEventTouchUpInside];
[loginButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[loginButton(WIDTH)]"
options:0
metrics:@{@"WIDTH": [NSNumber numberWithFloat:size.width]}
views:NSDictionaryOfVariableBindings(loginButton)]];
[loginButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton(HEIGHT)]"
options:0
metrics:@{@"HEIGHT": [NSNumber numberWithFloat:size.height]}
views:NSDictionaryOfVariableBindings(loginButton)]];
CAGradientLayer *layer = [UIColor greenGradient];
layer.frame = CGRectMake(0, 0, size.width, size.height);
layer.cornerRadius = 8;
[loginButton.layer insertSublayer:layer atIndex:0];
return loginButton;
}
Run Code Online (Sandbox Code Playgroud)
我需要自己处理突出显示吗?
我创建UIView了应用CAGradientLayer色彩效果,因为我附加了Image Bellow.现在在这里我想要像屏幕保护程序一样平滑地改变它的渐变颜色从上到下.我已经尝试使用NStimer那个位Done但它的颜色变化CAGradientLayer看起来像混蛋.

对于上面我使用Bellow方法代码: -
Timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TIMER) userInfo:nil repeats:NO];
-(void)TIMER
{
Count++;
[view_Color1 removeFromSuperview];
view_Color1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 341)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view_Color.bounds;
if (Count == 1)
{
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor greenColor] CGColor], (id)[[UIColor colorWithRed:44/255.0 green:255/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor colorWithRed:0/255.0 green:0/255.0 blue:254/255.0 alpha:1.0f] CGColor], (id)[[UIColor colorWithRed:252/255.0 green:0/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor colorWithRed:252/255.0 green:0/255.0 blue:6/255.0 alpha:1.0f] CGColor], (id)[[UIColor colorWithRed:253/255.0 green:131/255.0 blue:6/255.0 alpha:1.0f]CGColor], …Run Code Online (Sandbox Code Playgroud) 我想向带有渐变的视图添加内边框。以下代码有效并给了我这个结果
import UIKit
class InnerGradientBorderView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
backgroundColor = UIColor.clear
}
override func draw(_ rect: CGRect) {
super.draw(rect)
addGradientInnerBorder(width: 8, color: FlatWhite())
}
func addGradientInnerBorder(width: CGFloat, color: UIColor) {
// Setup
let topLeftO = CGPoint(x: 0, y: 0)
let topLeftI = CGPoint(x: width, y: width)
let topRightO = CGPoint(x: frame.width, y: 0)
let topRightI = CGPoint(x: frame.width - width, y: width)
let bottomLeftO …Run Code Online (Sandbox Code Playgroud) cagradientlayer ×10
ios ×9
swift ×5
gradient ×3
uiview ×3
calayer ×2
objective-c ×2
uibutton ×2
cashapelayer ×1
geometry ×1
iphone ×1
progress ×1
swift2 ×1
uibezierpath ×1
uitableview ×1
xcode ×1