ios - 如何用倾斜的渐变填充 CAShapeLayer

标签 ios swift optimization uibezierpath cashapelayer

如何用渐变和 45 度角填充 CAShapeLayer()

例如,在图片 1 中,下面的代码绘制了一个正方形并用蓝色填充图层 (UIColor.blueColor().CGColor)。

但是,我如何用从蓝色到红色的 45 度角的渐变填充它,就像在 Image 2 中一样(即 UIColor.blueColor().CGColorUIColor.redColor().CGColor)?

代码:

let path = UIBezierPath()
path.moveToPoint(CGPoint(x: 0, y: 0))
path.addLineToPoint(CGPoint(x: 0, y: 100))
path.addLineToPoint(CGPoint(x: 100, y: 100))
path.addLineToPoint(CGPoint(x: 100, y: 0))
path.closePath()

let shape = CAShapeLayer()
shape.path = path.CGPath
shape.fillColor = UIColor.blueColor().CGColor

Solid-color square next to square with gradient

最佳答案

为什么不使用具有 startPointendPoint 属性的 CAGradientLayer

你可以这样做:

import UIKit
import PlaygroundSupport

let frame = CGRect(x: 0, y: 0, width: 100, height: 100)
let view = UIView(frame: frame)

PlaygroundPage.current.liveView = view

let path = UIBezierPath(ovalIn: frame)

let shape = CAShapeLayer()
shape.frame = frame
shape.path = path.cgPath
shape.fillColor = UIColor.blue.cgColor

let gradient = CAGradientLayer()
gradient.frame = frame
gradient.colors = [UIColor.blue.cgColor,
                   UIColor.red.cgColor]
gradient.startPoint = CGPoint(x: 0, y: 1)
gradient.endPoint = CGPoint(x: 1, y: 0)
gradient.mask = shape

view.layer.addSublayer(gradient)

enter image description here

注意:为圆形添加了贝塞尔曲线路径,因为它可以在没有正方形 mask 的情况下工作。

关于ios - 如何用倾斜的渐变填充 CAShapeLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41019686/

相关文章:

ios - 未满时使 uiCollectionView 可滚动

performance - 如何首先加载低质量图像以更快地下载网站?

c# - 速度优化 Windows 窗体应用程序

ios - NSRegularExpression 如何给我一个 NSRange 越界?

如果在 JSON 中通知 "aps",iOS 推送通知将不起作用

ios - 通用链接 - 该域存在一些验证问题

ios - 以编程方式修改约束 Swift

android - Flash 游戏 - 返回主菜单

iphone - 视频正在旋转 180 度,但使用 swift 视频没有完全显示在框架中

c++ - Z3 Optimizer Unsatisfiability with Real Constraints Using C++ API