How to animate the frame of an layer with CABasicAnimation?

前端 未结 6 549
刺人心
刺人心 2020-12-05 07:57

I guess I have to convert the CGRect into an object to pass it to fromValue?

This is how I try it, but it doesn\'t work:

CABasicAnimation *frameAnima         


        
6条回答
  •  鱼传尺愫
    2020-12-05 08:14

    Here's a simple, fully working, example which may help someone.

    Just call .slideUp() on the class and it will slide up.

    class Slidey: YourViewClass {
    
        func slideUp() {
    
            print("\n\n SLIDE")
    
            let FF = layer.position
            var TT = FF
            TT.y -= 100
            print(FF)
            print(TT)
    
            CATransaction.begin()
            CATransaction.setDisableActions(true)
    
            CATransaction.setCompletionBlock{ [weak self] in
    
                print("DONE")
            }
    
            let a = CABasicAnimation(keyPath: "position")
    
            a.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
    
            a.isCumulative = false
            a.autoreverses = false
            a.isRemovedOnCompletion = true
            a.repeatCount = 0
            a.fromValue = FF
            a.toValue = TT
            a.duration = 0.70
            layer.add(a, forKey: nil)
    
            CATransaction.commit()
        }
    }
    

提交回复
热议问题