iOS icon jiggle algorithm

前端 未结 11 857
执笔经年
执笔经年 2020-12-12 16:31

I am writing an iPad app that presents user documents similar to the way Pages presents them (as large icons of the actual document). I also want to mimic the jiggling beha

11条回答
  •  旧巷少年郎
    2020-12-12 16:59

    In case anyone needs the same code in Swift

    class Animation {
    
        static func wiggle(_ btn: UIButton) {
            btn.startWiggling()
        }
    } 
    
    extension UIView {
    
    func startWiggling() {
    
        let count = 5
        let kAnimationRotateDeg = 1.0
    
        let leftDegrees = (kAnimationRotateDeg * ((count%2 > 0) ? +5 : -5)).convertToDegrees()
        let leftWobble = CGAffineTransform(rotationAngle: leftDegrees)
    
        let rightDegrees = (kAnimationRotateDeg * ((count%2 > 0) ? -10 : +10)).convertToDegrees()
        let rightWobble = CGAffineTransform(rotationAngle: rightDegrees)
    
        let moveTransform = rightWobble.translatedBy(x: -2.0, y: 2.0)
        let concatTransform = rightWobble.concatenating(moveTransform)
    
        self.transform = leftWobble
    
        UIView.animate(withDuration: 0.1,
                       delay: 0.1,
                       options: [.allowUserInteraction, .repeat, .autoreverse],
                       animations: {
                        UIView.setAnimationRepeatCount(3)
                        self.transform = concatTransform
        }, completion: { success in
            self.layer.removeAllAnimations()
            self.transform = .identity
        })
    }
    }
    

    Just Call

        Animation.wiggle(viewToBeAnimated)
    

    It is always best to write a wrapper over the functions you are calling so that even if you have to change the function arguments or may be the name of the function, it does not take you to rewrite it everywhere in the code.

提交回复
热议问题