2017-02-13 82 views
0

我想学习面向协议的编程方式。我希望StartButtonStopButton两个子类都符合Roundable协议,以便它们在它们内部具有一个四舍五入的层。如何在Swift中以面向协议的方式添加Layer到UIButton子类?

现在我StartButton子类看起来是这样的:

var backgroundLayer: CAShapeLayer = CAShapeLayer() 


    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    backgroundLayer.fillColor = Colors.Background.button.cgColor 
    backgroundLayer.rasterizationScale = 2.0 * UIScreen.main.scale 
    backgroundLayer.shouldRasterize = true 
    layer.addSublayer(backgroundLayer) 
    } 

    override func layoutSubviews() { 
    super.layoutSubviews() 
    backgroundLayer.path = UIBezierPath(ovalIn: self.bounds).cgPath 
    } 

请告诉我这样做与协议方法的最佳办法?

回答

0

如果您尝试使用协议共享代码,那么共享代码需要进入协议扩展。

您的协议还需要包含layerbackgroundLayer属性,以便它们可以在协议扩展中访问。

+0

你有没有这方面的一个例子。如何在初始化按钮时添加backgroundLayer? –

+0

实际上,创建一个UIButton子类更有意义,在该子类中实现形状的东西,然后让'StartButton'和'StopButton'继承它。协议用于描述对其他对象可见的行为,但具有圆形形状更多的是内部实现细节。所以这不是练习使用协议的好例子。 – Uncommon

+0

好的,谢谢你。我会在其他一些更合适的情况下尝试协议。 –

相关问题