2016-02-27 2 views
0

Я пытался добавить слой к своим представлениям и кнопкам, но как-то слой не появляется вообще. Что мне не хватает?CAShapelayer не отображается

class ViewController: UIViewController { 

    var button1: CustomButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     button1 = CustomButton(frame: CGRectZero) 

     let views1 = ["button1": button1] 

     button1.backgroundColor = .clearColor() 
     view.addSubview(button1) 

     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[button1(50)]", options: [], metrics: nil, views: views1)) 
     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[button1(50)]-50-|", options: [], metrics: nil, views: views1)) 
    } 
} 

class CustomButton: UIButton { 

    let shape = CAShapeLayer() 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     translatesAutoresizingMaskIntoConstraints = false 

     shape.fillColor = UIColor.redColor().CGColor 
     shape.strokeColor = UIColor.blackColor().CGColor 
     shape.lineWidth = 0.5 

     shape.bounds = CGRect(x: 0, y: 0, width: 50, height: 50) 

     layer.insertSublayer(shape, atIndex: 0) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     let padding: CGFloat = 10 

     let x = frame.origin.x - padding 
     let y = frame.origin.y - padding 
     let widths = bounds.width + 2 * padding 
     let height = bounds.height + 2 * padding 

     let rect = CGRect(x: x, y: y, width: widths, height: height) 

     shape.frame = rect 
     shape.path = UIBezierPath(rect: rect).CGPath 
    } 
} 

Кнопка добавляется к просмотру без проблем, но ничего слоя не кажется видимым (пытается изменить цвета при постукивании и т.д., а также, установив положение или просто отредактировать сам слой без добавления нового) ,

ответ

0

Вы пропустили '|' в строке ограничения. Обновите, так как,

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[button1(50)]|", options: [], metrics: nil, views: views1)) 
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[button1(50)]-50-|", options: [], metrics: nil, views: views1))