iOS动画:02-箭头根据半圆路径旋转

两种方式来实现箭头根据路径旋转的动画

第一种(master分支):组合的思想 github地址:ArrowRotationAnimation

一:思想

  1. 让路径旋转的动画
  2. 让箭头图片旋转的动画
  3. 两者组合在一起就能实现

二:实现效果

imageViewMoveWithPath.gif

三:关键代码:

//rotationMode让imageView根据路径自动旋转,这个很神奇了
keyAnimation.rotationMode = "auto"

第二种方法:又一个仓库github地址:XXCycleProcessAnimation

这种方式比第一种方式更加自然

一:思想

  1. 用CADisplayLink定时画图
  2. 根据进度画弧
  3. 根据进度修改箭头角度

二:效果如图:


XXCycleProcessAnimation.gif

三:关键代码:

根据画弧的进度,计算箭头的旋转角度

_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(progress)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
- (void)progress{
    _progress += 0.3/60;
    
    //半径
    CGFloat radius = (100 - 4) * 0.5;
    //旋转角度
    CGFloat rotation = M_PI  * _progress;
    [_path removeAllPoints];
    //画弧(参数:中心、半径、起始角度(3点钟方向为0)、结束角度、是否顺时针)
    [_path addArcWithCenter:(CGPoint){100 * 0.5, 100 * 0.5} radius:radius startAngle:-M_PI  endAngle: -M_PI + rotation clockwise:YES];
    _shapeLayer.path = _path.CGPath;
    
    //根据角度算箭头位置, 求出圆周上的点
    _arrow.transform = CGAffineTransformMakeRotation(rotation);
    _arrow.center = CGPointMake(150 - radius * cos(rotation) , 150 - radius * sin(rotation));
    
    if (_progress >= 1.0) {
        _progress = 0;
    }
}

你可能感兴趣的:(iOS动画:02-箭头根据半圆路径旋转)