开始抖动
-(void)BeginWobble
{
srand([[NSDate date] timeIntervalSince1970]);
float rand=(float)random();
CFTimeInterval t=rand*0.0000000001;
[UIView animateWithDuration:0.1 delay:t options:0 animations:^
{
要抖动的视图.transform=CGAffineTransformMakeRotation(-0.05);
} completion:^(BOOL finished)
{
[UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionAllowUserInteraction animations:^
{
要抖动的视图.transform=CGAffineTransformMakeRotation(0.05);
} completion:^(BOOL finished) {}];
}];
}
停止抖动
-(void)EndWobble
{
[UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState animations:^
{
要抖动的视图.transform=CGAffineTransformIdentity;
} completion:^(BOOL finished) {}];
}
以上是左右抖动效果,另有放大缩小效果见
Demo:https://github.com/fateshen/SZWobble
如有启发请点✨Star💗
UIViewAnimationOptions解释
有评论的朋友说解释一下UIViewAnimationOptions中的枚举值都是什么意思,今天写了一下供大家参考:
UIViewAnimationOptionLayoutSubviews // 所有子视图跟随一起动画(默认)
UIViewAnimationOptionAllowUserInteraction // 动画过程中允许交互操作,但是响应的位置以视图动画最终位置为准
UIViewAnimationOptionBeginFromCurrentState // 从当前的状态开始动画
UIViewAnimationOptionRepeat // 重复执行动画,单次动画结束,瞬间变为初始状态继续进行动画,依此循环
UIViewAnimationOptionAutoreverse // 往返执行动画,单次动画结束,沿原路径返回反向执行,要与UIViewAnimationOptionRepeat同时使用
UIViewAnimationOptionOverrideInheritedDuration // 在嵌套动画中,不受父层动画时间影响。默认情况下子层继承父层动画时间,忽略自己的时间
UIViewAnimationOptionOverrideInheritedCurve // 在嵌套动画中,不受父层属性动画时间(如UIViewAnimationOptionCurveEaseInOut)影响
UIViewAnimationOptionAllowAnimatedContent // 允许多个动画同时执行
UIViewAnimationOptionShowHideTransitionViews // 控制两个动画视图的显示和隐藏(功能类似于addsubview+removefromsuperview),使用这个属性(一般在transitionFromView:toView:duration:options:completion:这个方法中使用),fromView会被隐藏,toView会被显示
UIViewAnimationOptionOverrideInheritedOptions // 不使用任何选项
/* 动画速度方式 */
UIViewAnimationOptionCurveEaseInOut // 慢->快->慢
UIViewAnimationOptionCurveEaseIn // 慢->快
UIViewAnimationOptionCurveEaseOut // 快->慢
UIViewAnimationOptionCurveLinear // 匀速
/* 动画过渡方式 */
UIViewAnimationOptionTransitionNone // 不指定过度方式
UIViewAnimationOptionTransitionFlipFromLeft // 从左侧翻转
UIViewAnimationOptionTransitionFlipFromRight // 从右侧翻转
UIViewAnimationOptionTransitionCurlUp // 从上部翻页
UIViewAnimationOptionTransitionCurlDown // 从下部翻页
UIViewAnimationOptionTransitionCrossDissolve // 动画初始位置状态由显示逐渐透明隐藏,动画结束位置状态由透明逐渐变为显示
UIViewAnimationOptionTransitionFlipFromTop // 从上部翻转
UIViewAnimationOptionTransitionFlipFromBottom // 从下部翻转
UIViewAnimationOptionPreferredFramesPerSecondDefault // 默认
UIViewAnimationOptionPreferredFramesPerSecond60 // 每秒60帧的刷新速率
UIViewAnimationOptionPreferredFramesPerSecond30 // 每秒30帧的刷新速率
网友评论