2016-11-14 3 views
0

Я работаю над проектом Swift и создаю круг вокруг UIButton, используя CAShapeLayer и создавая круговой путь UIBezeir. Проблема в том, что если я добавлю этот CAShapLayer в качестве подуровня к UIbutton, не работа. Однако добавление этого подуровня в UiView создает круг.Добавление CAShapeLayer в UIButton не работает

Ниже приведен мой код.

let ovalPath = UIBezierPath(arcCenter: lockButton.center, radius: 
     CGFloat(lockButton.frame.size.width/2), startAngle: CGFloat(startAngle), endAngle: CGFloat(sentAngel), clockwise: true) 
    UIColor.grayColor().setFill() 
    ovalPath.fill() 

    let circleLayer = CAShapeLayer() 
    circleLayer.path = ovalPath.CGPath 

    view.layer.addSublayer(circleLayer) 
    circleLayer.strokeColor = UIColor.blueColor().CGColor 
    circleLayer.fillColor = UIColor.clearColor().CGColor 
    circleLayer.lineWidth = 10.0 





    let animation = CABasicAnimation(keyPath: "strokeEnd") 

    // Set the animation duration appropriately 
    animation.duration = 0.5 

    // Animate from 0 (no circle) to 1 (full circle) 
    animation.fromValue = 0 
    animation.toValue = 1 


    // Do a linear animation (i.e. the speed of the animation stays the same) 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 

    // Set the circleLayer's strokeEnd property to 1.0 now so that it's the 
    // right value when the animation ends. 
    circleLayer.strokeEnd = 3.0 

    // Do the actual animation 
    circleLayer.addAnimation(animation, forKey: "animateCircle") 

Может ли кто-нибудь предложить мне, если мы сможем добавить CAShapeLayer в UIButton? Thanks

+0

Вы должны иметь возможность добавить CAShapeLayer в ** любые подслои CALayer **. Сделать его поведение - это еще один вопрос. Что ты пытаешься сделать? «Круглая кнопка» не нуждается в новых слоях. Маскировка к границам также я не вижу. Поэтому дайте более подробную информацию о том, что есть и не работает, может быть, я могу помочь. – dfd

+0

Я пытаюсь добавить Круговой прогресс вокруг кнопки –

+0

Любые конкретные причины для этого? –

ответ

1

Очень очевидная проблема с вашим кодом в том, что ваш circleLayerне имеет рамы. Удивительно, что что-то появляется вообще. Вам необходимо установить фрейм circleLayer так, чтобы он имел размер и чтобы он правильно позиционировался относительно его суперслоя.

+0

Он также может помочь вам увидеть код, который накладывает круглую форму на кнопку и работает правильно: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch12p566customThermometer/ch25p840customThermometer/MyCircularProgressButton. swift – matt

+0

Мне нужно предоставить фрейм, я спрашиваю об этом, потому что я предоставил центр и радиус UIBezeirPath. –

+0

Речь идет не о пути, а о слое и о том, куда он идет в своем суперслое. – matt