2017-02-13 2 views
0

Я хочу научиться программированию в соответствии с протоколом. И я хочу, чтобы подклассы StartButton и StopButton соответствовали протоколу Roundable, так что внутри они будут иметь закругленный слой.Как добавить Layer к подклассу UIButton в протокольном режиме в swift?

Сейчас мой 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

Если вы пытаетесь использовать протокол для совместного использования кода, то общий код должен перейти в расширение протокола.

В вашем протоколе также должны быть указаны свойства layer и backgroundLayer, чтобы они могли быть доступны в расширении протокола.

+0

У вас есть пример этого. Как можно добавить фоновый слой при инициализации кнопки? –

+0

На самом деле, имеет смысл создать подкласс UIButton, где вы реализуете материал фигуры, а затем наследуете от него «StartButton» и «StopButton». Протоколы предназначены для описания поведения, видимого для других объектов, но наличие круглой формы является скорее внутренней детализацией реализации. Таким образом, это не является хорошим примером для практики использования протоколов. – Uncommon

+0

ОК, спасибо за это. Я попробую протоколы в некоторых других более подходящих случаях. –

Смежные вопросы