Search code examples
iosswiftuiviewswift2animatewithduration

UIView animateWithDuration is too fast


I have used UIView animateWithDuration to increase the shapeLayer.frame.size.height in the code below, but regardless of the duration it animates very fast. A few posts that I found recommended using some delay time which I've done, but it still animates very quickly, ignoring the 5 seconds duration I set.

private let minimalHeight: CGFloat = 50.0  
private let shapeLayer = CAShapeLayer()

override func loadView() {  
super.loadView()

shapeLayer.frame = CGRect(x: 0.0, y: 0.0, width: view.bounds.width, height: minimalHeight)
shapeLayer.backgroundColor = UIColor(red: 57/255.0, green: 67/255.0, blue: 89/255.0, alpha: 1.0).CGColor
view.layer.addSublayer(shapeLayer)

  }

func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
}


override func viewDidAppear(animated: Bool) {
   delay(3)    {

    UIView.animateWithDuration(5.0) {
        self.shapeLayer.frame.size.height += 400.0
        }
    }

How can I make the animation complete in 5 seconds?


Solution

  • Maybe you should try CABasicAnimation

        let fromValue = view2.layer.bounds.height
        let toValue = view2.layer.bounds.height + 50
        CATransaction.setDisableActions(true) //Not necessary
        view2.layer.bounds.size.height = toValue
        let positionAnimation = CABasicAnimation(keyPath:"bounds.size.height")
        positionAnimation.fromValue = fromValue
        positionAnimation.toValue = toValue
        positionAnimation.duration = 1
        view2.layer.addAnimation(positionAnimation, forKey: "bounds")