Я создаю случайный UIBezierPath
, указав путь к CAShapeLayer
«s .path
свойство, а затем анимировать CAShapeLayer
» ход s так:CAShapeLayer shadowPath анимация. Как предотвратить заполнение тени при завершении анимации?
// Get a path
let path = createBezierPath()
// Shape layer properties
let color = randomCGColor() // Color of path and shadow
let lineWidth = CGFloat(arc4random_uniform(50) + 11) // Width of line and shadow radius
shapeLayer.path = path.CGPath
shapeLayer.lineJoin = kCALineJoinRound
shapeLayer.lineCap = kCALineCapRound
shapeLayer.strokeColor = color
shapeLayer.lineWidth = lineWidth
shapeLayer.fillColor = UIColor.clearColor().CGColor
// Shape layer shadow properties
shapeLayer.shadowPath = path.CGPath
shapeLayer.shadowColor = color
shapeLayer.shadowOffset = CGSizeZero
shapeLayer.shadowRadius = lineWidth
shapeLayer.shadowOpacity = 1.0
// Add shape layer
self.layer.addSublayer(shapeLayer)
// Stroke path animation
let pathAnimation: CABasicAnimation = CABasicAnimation(keyPath: "strokeEnd")
pathAnimation.fromValue = 0.0
pathAnimation.toValue = 1.0
// Shadow path animation
let shadowPathAnimation: CABasicAnimation = CABasicAnimation(keyPath: "shadowPath")
shadowPathAnimation.fromValue = 0.0
shadowPathAnimation.toValue = path.CGPath
// Animation group
let animationGroup = CAAnimationGroup()
animationGroup.duration = 5.0
animationGroup.animations = [pathAnimation, shadowPathAnimation]
shapeLayer.addAnimation(animationGroup, forKey: "allMyAnimations")
Вопрос в том, когда анимация завершает тень применяется ко всей форме. Я хотел бы, чтобы тень просто применялась к штриху CAShapeLayer
. Как я могу предотвратить тень от применения ко всей фигуре после завершения анимации?
Вот пример вопроса, я имею в виду:
Hi. Это аккуратно. Я бы хотел сыграть с этим на детской площадке. Могу ли я поэкспериментировать с вашей функцией 'createBezierPath()'? – tymac
@tymac here ya go: https://github.com/DanielStormApps/CreateRandomBezierPath –
Спасибо @ daniel-storm! – tymac