Core Animation动画学习3——基本动画、关键帧动画、转场动画 和 动画组

关于动画的详细介绍,请看如下链接:

Core Animation1-简介
Core Animation2-CABasicAnimation

1. CABasicAnimation提供基本的动画

2. CAKeyframeAnimation可以添加多个动画路径

如下例子中实现了长按imageView的抖动效果

// 核心动画都是假象,不能改变layer的真实属性的值
// 展示的位置和实际的位置不同。实际位置永远在最开始位置
- (void)longPress:(UILongPressGestureRecognizer *)longPress
{
    if (longPress.state == UIGestureRecognizerStateBegan) {

        CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];

        anim.keyPath = @"transform.rotation";

        anim.values = @[@(angle2radian(-5)),@(angle2radian(5)),@(angle2radian(-5))];

        anim.repeatCount = MAXFLOAT;

        anim.duration = 0.5;

        [_imageView.layer addAnimation:anim forKey:nil];

    }
}

3. 转场动画可以实现图片3D切换的效果

- (void)transitionAnimation
{
    _index++;

    if (_index == 4) {
        _index = 1;
    }
    NSString *fileName = [NSString stringWithFormat:@"%d",_index];
    _imageView.image = [UIImage imageNamed:fileName];

    CATransition *anim = [CATransition animation];

    anim.type = @"pageCurl";

    anim.subtype = kCATransitionFromLeft;
//    anim.startProgress = 0.5;

    anim.duration = 2;

    [_imageView.layer addAnimation:anim forKey:nil];
}
转场类型如下:

这里写图片描述

转场动画也可以用UIView封装的动画来完成,但是效果较少:

- (void)transitionByUIView
{

    _index++;

    if (_index == 4) {
        _index = 1;
    }
    NSString *fileName = [NSString stringWithFormat:@"%d",_index];
    _iamgeView.image = [UIImage imageNamed:fileName];

    [UIView transitionWithView:self.view duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:nil completion:nil];

}

4. 动画组

动画组可以组合很多个基本动画,并发同时执行:

- (void)animationGroup
{

    CABasicAnimation *rotation = [CABasicAnimation animation];

    rotation.keyPath = @"transform.rotation";

    rotation.toValue = @M_PI_2;

    CABasicAnimation *position = [CABasicAnimation animation];

    position.keyPath = @"position";

    position.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 250)];

    CABasicAnimation *scale = [CABasicAnimation animation];

    scale.keyPath = @"transform.scale";

    scale.toValue = @0.5;



    CAAnimationGroup *group = [CAAnimationGroup animation];

    group.animations = @[rotation,position,scale];

    group.duration = 2;

    // 取消反弹
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;


    [_redView.layer addAnimation:group forKey:nil];
}

需要注意的是,核心动画所改变的位置,仅仅是用于动画显示,并不会真正改变动画对象的真正状态.

所以CALayer的核心动画,大多用于转场,而其它地方不用

例如,移动一张图片,即使动画设置成不重置为初始状态(不反弹),移动后,图片的真正位置,依然是初始位置,而不是显示的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值