iOS icon jiggle algorithm

前端 未结 11 844
执笔经年
执笔经年 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 17:11

    OK, so the openspringboard code didn't quite do it for me but I did allow me to create some code that I think is a bit better, still not prefect but better. If anyone has suggestions to make this better, I would love to hear them... (add this to the subclass of the view(s) you want to jiggle)

    #define degreesToRadians(x) (M_PI * (x) / 180.0)
    #define kAnimationRotateDeg 1.0
    #define kAnimationTranslateX 2.0
    #define kAnimationTranslateY 2.0
    
    - (void)startJiggling:(NSInteger)count {
    
        CGAffineTransform leftWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? +1 : -1 ) ));
        CGAffineTransform rightWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? -1 : +1 ) ));
        CGAffineTransform moveTransform = CGAffineTransformTranslate(rightWobble, -kAnimationTranslateX, -kAnimationTranslateY);
        CGAffineTransform conCatTransform = CGAffineTransformConcat(rightWobble, moveTransform);
    
        self.transform = leftWobble;  // starting point
    
        [UIView animateWithDuration:0.1
                              delay:(count * 0.08)
                            options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                         animations:^{ self.transform = conCatTransform; }
                         completion:nil];
    }
    
    - (void)stopJiggling {
        [self.layer removeAllAnimations];
        self.transform = CGAffineTransformIdentity;  // Set it straight 
    }
    

提交回复
热议问题