开发iOS图像动画我的收藏

关于Core Animation

2015-09-16  本文已影响542人  sydie

背景:前两天面试,问到项目中的动画效果实现,然后追问到怎么中途停止动画。


分析:这个问题我首先想到的就是CoreAnimation.中文翻译为核心动画。07年乔帮主在发布会上演示了它的强大也着重强调了它的easy。也就是告诉大家,要做动画就用我的这个核心动画处理。它的优点:


具体介绍一下:其实在天朝,APP更注重实用性,而不是你有多炫。所以大部分的应用不会添加很多华而不实的动画效果,当然游戏应用个人就喜欢越炫的越好了。虽然用的机会不是很多,但是如果在每款软件中添加一小点独特的动画效果也是能给人一种耳目一新的感觉的。


Paste_Image.png
// 创建动画
    CABasicAnimation *animat = [CABasicAnimation animation];
   // 动画改变属性 
    animat.keyPath = @"position";
    // 改变后的属性
    animat.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
    // 动画组件不被移除
    animat.removedOnCompletion = NO;
    // 保存最新状态
    animat.fillMode = kCAFillModeForwards;
// 图标抖动
// 定义帧动画
CAKeyframeAnimation *animat = [CAKeyframeAnimation animation];
// 改变弧度
 animat.values = @[angleRadio(-5),angleRadio(5),angleRadio(-5)];
 // 关键帧是什么必须有。
animat.keyPath = @"transform.rotation";
// 重复次数 
animat.repeatCount = MAXFLOAT;
// 添加动画
[_imageView.layer addAnimation:animat forKey:nil];
 // 获取图片名称
NSString *imageName = [NSString stringWithFormat:@"%d",_i];
// 添加图片
self.imageView.image = [UIImage imageNamed:imageName];
_i++;
// 添加转场效果
CATransition *anim = [CATransition animation];
// 转场类型
anim.type = @"fade";
[self.imageView.layer addAnimation:anim forKey:nil];
  - (void)animationDidStart:(CAAnimation *)anim;

  - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
- (void)pauseAnimate
{
    // 获取停止时间
    CFTimeInterval pausedTime = [self convertTime:CACurrentMediaTime() fromLayer:nil];
    self.speed = 0.0;
    self.timeOffset = pausedTime;
}

- (void)resumeAnimate
{
    // 获取暂停时间
    CFTimeInterval pausedTime = [self timeOffset];
    if (pausedTime > 0) {
        self.speed = 1.0;
        self.timeOffset = 0.0;
        self.beginTime = 0.0;
        CFTimeInterval timeSincePause = [self convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
        // 设置开始时间
        self.beginTime = timeSincePause;
    }
}
上一篇下一篇

猜你喜欢

热点阅读