2018正版葡京赌侠诗CoreAnimation变速齿轮旋转动画达成

小项目:完结变速旋转动画

效果图

体系需要:
  1. 刚伊始加载财富的时候,齿轮速度从慢到快,不断加速
  2. 加速到自然速度,就不在加快,以这么些速度一直旋转下去
  3. 当加载财富形成的时候,齿轮速度又开首不久变慢,不断减速
  4. 放慢已毕直到没速度的时候,关闭加载视图

此地自身是选取CoreAnimation完成的,感觉麻烦,可是万幸促成了效果

第叁,大家分析该动画进程,一共要求2个卡通:

  • 千帆竞发加载动画
  • 正在加载动画
  • 为止加载动画

上边的loadingGearView就是上边GIF图的那么些轮子

第2大家来看下开端加载动画:
#pragma mark 图片开始加载动画
- (void)startLoadingAnimation{
    if (loadingGearView)
    {
        //先移除之前的动画
        [loadingGearView.layer removeAllAnimations];
        //创建旋转动画
        CABasicAnimation* startRotation = 
                    [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        startRotation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
        startRotation.duration = 2.0;
        //设置旋转动画是开始先慢后面越来越快的动画运动时间函数
        startRotation.timingFunction = 
                    [CAMediaTimingFunction functionWithName:@"easeIn"];
        startRotation .delegate = self;
        //设置标志来区别是否是即将停止
        [startRotation setValue:@NO forKey:@"isStop"];
        //添加动画
        [loadingGearView.layer addAnimation:startRotation forKey:@"startRotationAnimation"];
    }
}
笔者们地点安装了代理,咱们再代理方法中贯彻正在加载动画
#pragma mark 动画结束的动画代理方法中,添加图片正在加载动画
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    if ([[anim valueForKey:@"isStop"] boolValue]) {
        [self hideView];
        return;
    }
    CABasicAnimation* rotationAnimation = 
                  [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
    rotationAnimation.duration = 1.0;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = HUGE_VALF;
    [loadingGearView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

}
得了加载动画和起初加载动画大致,不一致的是easeOut的卡通片时间函数
#pragma mark 图片结束加载动画
- (void)stopLoadingAnimation{
    if (loadingGearView)
    {
        [loadingGearView.layer removeAllAnimations];
        //创建结束旋转动画
        CABasicAnimation* stopRotation = 
                   [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        stopRotation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
        stopRotation.duration = 2.0;
        stopRotation.delegate = self;
        //前面的都一样,这里开始就和开始旋转动画不同了
        stopRotation.timingFunction = [CAMediaTimingFunction functionWithName:@"easeOut"];
        [stopRotationsetValue:@YES forKey:@"isStop"];
        [loadingGearView.layer addAnimation:stopRotation forKey:@"stopRotationAnimation"];
    }
}
最终上一个美图:

动漫美观的女孩子,恐怖症,必须要有三个配图

相关文章