2016-11-25 8 views
1

Я пытаюсь сделать эту анимацию в течение нескольких дней. Я пытаюсь оживить размер моей маски, в основном принимая большой круг (маску) и уменьшая его.CALayer cricle mask анимация неправильное поведение + swift

@IBOutlet weak var myView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     animateMask() 
    } 

    func presentMaskScreenWithAnimation() { 

     //Setup Mask Layer 
     let bounds = myView.bounds 
     let maskLayer = CAShapeLayer() 
     maskLayer.frame = bounds 
     maskLayer.fillColor = UIColor.brown.cgColor 

     //CropCircle Out of mask Layer 
     let initialCircle = CGRect(x: 10, y: 10, width: 300, height: 300) 
     let path = UIBezierPath(roundedRect: initialCircle, cornerRadius: initialCircle.size.width/2) 

     path.append(UIBezierPath(rect: bounds)) 
     maskLayer.path = path.cgPath 
     maskLayer.fillRule = kCAFillRuleEvenOdd 

     myView.layer.mask = maskLayer 

     //Define new circle path 
     let circlePath2 = CGRect(x: 50, y: 50, width: 100, height: 100) 
     let path2 = UIBezierPath(roundedRect: circlePath2, cornerRadius: circlePath2.size.width/2) 


     //Create animation 
     let anim = CABasicAnimation(keyPath: "path") 



      anim.fromValue = path.cgPath 
      anim.toValue = path2.cgPath 
      anim.duration = 3.0 
      anim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 

      maskLayer.add(anim, forKey: nil) 
    } 

Этот код устанавливает маску и начинает анимировать ее, однако она переворачивает всю maskLayer, я пытаюсь просто анимировать путь круга, Большой -> Малый

Start enter image description here

Готовые enter image description here

ответ

2

Добавить path2.append(UIBezierPath(rect: bounds)) после let path2 = UIBezierPath(roundedRect: circlePath2, cornerRadius: circlePath2.size.width/2). Также не забудьте сделать maskLayer.path = path2.cgPath в конце, если вы хотите, чтобы уменьшающаяся маска оставалась после анимации.

+0

f @ # $ да! Спасибо друг – user934902

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