在最近的項目中使用到View抖動的效果,就從StackOverflow搬運了一個在此記錄一下。
- (void)earthquake:(UIView*)itemView {
CGFloat t = 2.0;
CGAffineTransform leftQuake = CGAffineTransformTranslate(CGAffineTransformIdentity, t, 0);
CGAffineTransform rightQuake = CGAffineTransformTranslate(CGAffineTransformIdentity, -t, 0); //水平晃動
itemView.transform = leftQuake; // starting point
[UIView beginAnimations:@"earthquake" context:(__bridge void *)(itemView)];
[UIView setAnimationRepeatAutoreverses:YES]; // 如果不加這一句 整個動畫感覺不連貫
[UIView setAnimationRepeatCount:5];
[UIView setAnimationDuration:0.07];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(earthquakeEnded:finished:context:)];
itemView.transform = rightQuake; // end here & auto-reverse
[UIView commitAnimations];
}
- (void)earthquakeEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if ([finished boolValue]) {
UIView* item = (__bridge UIView *)context;
item.transform = CGAffineTransformIdentity;
}
}