'How do you make images wobble like on the iPhone home screen?
I have many icons in my app and I would like to animate them in a manner similar to what happens when you try to delete applications from the iPhone's home screen. How can you do this?
Additionally, is there a way to have the icons animate up onto the screen in a manner similar to what happens when you unlock the iPhone?
Solution 1:[1]
with blocks (iOS 4+) it would look like:
#define RADIANS(degrees) ((degrees * M_PI) / 180.0)
CGAffineTransform leftWobble = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(-2.0));
CGAffineTransform rightWobble = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(2.0));
cell.transform = leftWobble; // starting point
cell.deleteButton.hidden = NO;
[UIView animateWithDuration:0.125 delay:0 options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) animations:^{
cell.transform = rightWobble;
}completion:^(BOOL finished){
}];
Solution 2:[2]
If you mean icons in the main screen of iOS, I don't think it would be ever possible.
Of course, if you mean icons inside your application, you can do whatever you want.
Solution 3:[3]
Answers seem a little outdated, so here's updated logic within an easy to use UIView extension.
Default value for duration parameter being that the animation happens for infinity.
Swift 5 -2022
extension UIView {
func wobble(duration: CFTimeInterval = .infinity) {
let animation = CAKeyframeAnimation(keyPath: "transform.rotation.z")
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
animation.duration = 0.2
animation.values = [0.015, 0.03, 0.015, 0, -0.015, -0.03, -0.015, 0]
animation.repeatDuration = duration
layer.add(animation, forKey: "wobble")
}
func layerremoveAllAnimations() {
layer.removeAllAnimations()
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | FreaknBigPanda |
| Solution 2 | MHC |
| Solution 3 | Joshua Hart |
