Ios 在swift中替代UIView中的默认图层类型
我想在swift中创建UIView子类,并使用CAShapeLayer作为该子类的层类型-使用layerClass()覆盖层类型 如何访问CAShapeLayer中的属性,而不是CALayer中的属性,例如下面示例中的path。下面的代码未编译,因为path不是CALayer的成员Ios 在swift中替代UIView中的默认图层类型,ios,swift,Ios,Swift,我想在swift中创建UIView子类,并使用CAShapeLayer作为该子类的层类型-使用layerClass()覆盖层类型 如何访问CAShapeLayer中的属性,而不是CALayer中的属性,例如下面示例中的path。下面的代码未编译,因为path不是CALayer的成员 override class func layerClass() -> AnyClass { return CAShapeLayer.self } override func awakeFromNib
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
}
请注意,self.layer始终在UIView中返回泛型CALayer,因此您必须将其类型转换为特定类,以确保其类型正确。您可以执行以下操作,以确保调用path to 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
}
强制转换图层,然后使用路径特性
(self.layer as! CAShapeLayer).path = path.CGPath
从Swift 3开始,答案似乎是
override public class var layerClass: Swift.AnyClass {
get {
return CAShapeLayer.self
}
}
更简洁的是,来自(Swift 4):
并确保将活动方案设置为在设备(甚至是通用设备)上构建,否则即使在尝试构建之前,也会出现未解决的符号错误。
override class var layerClass: AnyClass {
return CAShapeLayer.self
}