我想在swift中继承UIView,并使用CAShapeLayer作为此子类的图层类型 - 使用layerClass()覆盖图层类型.
如何访问CAShapeLayer中的属性,但不访问CALayer中的属性 - 例如下面示例中的路径.下面的代码无法编译,因为path不是CALayer的成员.
override class func layerClass() -> AnyClass {
return CAShapeLayer.self
}
override func awakeFromNib() {
var path: UIBezierPath = UIBezierPath.init(ovalInRect: CGRectMake(0, 0, 30, 10))
self.layer.path = path.CGPath
}
Run Code Online (Sandbox Code Playgroud)
似乎从Swift 3开始,答案是
override public class var layerClass: Swift.AnyClass {
get {
return CAShapeLayer.self
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,self.layer始终在UIView中返回一个通用CALayer,因此您必须将其类型化为您的特定类,以确保它具有正确的类型.您可以执行以下操作以确保将CAShapeLayer的路径调用为CALayer类类型.
override class func layerClass() -> AnyClass {
return CAShapeLayer.self
}
override func awakeFromNib() {
guard let shapeLayer = self.layer as? CAShapeLayer else { return }
let path: UIBezierPath = UIBezierPath.init(ovalInRect: CGRectMake(0, 0, 30, 10))
shapeLayer.path = path.CGPath
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3463 次 |
| 最近记录: |