iOS Develop

iOS图标抖动效果

2019-09-27  本文已影响0人  iOS_林亦辰

开始抖动

-(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帧的刷新速率
上一篇下一篇

猜你喜欢

热点阅读