将@IBDesignable 用于渐变视图
Posted
技术标签:
【中文标题】将@IBDesignable 用于渐变视图【英文标题】:Using @IBDesignable for a gradient view 【发布时间】:2017-02-22 18:58:15 【问题描述】:我正在使用以下内容创建在 IB 中可见的渐变视图:
import UIKit
import QuartzCore
@IBDesignable
class FAUGradientView: UIView
@IBInspectable var firstColor:UIColor = UIColor.clear
@IBInspectable var secondColor:UIColor = UIColor.clear
@IBInspectable var startPoint:CGPoint = CGPoint(x: 0.0, y: 1.0)
@IBInspectable var endPoint:CGPoint = CGPoint(x: 1.0, y:0.0)
var gradientLayer:CAGradientLayer!
override func draw(_ rect: CGRect)
super.draw(rect)
gradientLayer = CAGradientLayer()
self.gradientLayer.colors = [firstColor, secondColor]
self.gradientLayer.startPoint = self.startPoint
self.gradientLayer.endPoint = self.endPoint
self.gradientLayer.frame = self.frame
self.layer.addSublayer(self.gradientLayer)
但是,我在 IB 中得到的是纯黑色视图,而不是具有两种颜色渐变的视图,如下所示:
【问题讨论】:
【参考方案1】:解决了。它们必须是 cgColors,但 XCode 不会给您一个错误来表明这一点。
[firstColor.cgColor, secondColor.cgColor]
以上解决了这个问题。
【讨论】:
【参考方案2】:效果很好,但是;
self.gradientLayer.frame = self.frame
应该是
self.gradientLayer.frame = self.bounds
或者你可以得到一些非常奇怪的绘制偏移,这取决于视图在父视图中的位置
【讨论】:
以上是关于将@IBDesignable 用于渐变视图的主要内容,如果未能解决你的问题,请参考以下文章
将故事板指南标题设置为 @IBInspectable 值,以便快速自定义 @IBDesignable 视图?