• iOS之动画


    这几天做项目,涉及到美观和趣味性的问题,所以用到了动画,但是现在的iOS动画资料比较少,所以我自己整理了一些自己曾经用过的动画例子来和大家分享,同时也欢迎有好的想法大家一起交流~~

    序列帧动画

    曾经项目里的一段源码:

    UIImageView * activityImageView = [[UIImageView alloc] init];
    NSMutableArray *imagesList = [NSMutableArray array];
    for (NSInteger i = 1; i < 3; i++) {
    
    NSString *fileName = [NSString stringWithFormat:@"eggplant%i.png",i];
    UIImage *image = [UIImage imageNamed:fileName];
    [imagesList addObject:image];
    }
    [activityImageView setAnimationImages:imagesList];
    [activityImageView setAnimationDuration:0.5];
    //0为无限循环
    [activityImageView setAnimationRepeatCount:0];
    [activityImageView startAnimating];
    //    [activityImageView stopAnimating];

    UIView 动画

    UIViewAnimation

    //创建一个CGAffineTransform  transform对象
    CGAffineTransform  transform;
    //设置旋转度数
    transform = CGAffineTransformRotate(testView.transform,M_PI/6.0);
    //动画开始
    [UIView beginAnimations:@"rotate" context:nil ];
    //动画时常
    [UIView setAnimationDuration:2];
    //自动反转
    //    [UIView setAnimationRepeatAutoreverses:YES];
    [UIView setAnimationRepeatCount:3];
    //添加代理
    [UIView setAnimationDelegate:self];
    //获取transform的值
    [testView setTransform:transform];
    //关闭动画
    [UIView commitAnimations];

    UIViewAnimationWithBlocks

    /* Duration 动画持续时间
    delay 动画延迟时间
    options 动画的节奏控制 */
    
    [UIView animateWithDuration:5 delay:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    testView.frame = CGRectMake(100, 300, 100, 100);
    } completion:^(BOOL finished) {
    
    }];
    
    /* Damping 动画的弹力指数
    Velocity 弹力的初速度 */
    
    [UIView animateWithDuration:0.5 delay:1 usingSpringWithDamping:0.8 initialSpringVelocity:10 options:0 animations:^{
    testView.frame = CGRectMake(100, 300, 100, 100);
    } completion:^(BOOL finished) {
    
    }];

    CoreAnimation

    CATransition

    继承关系:CATransition -> CAAnimation

    CATransition *transition = [CATransition animation];
    transition.duration = 0.5;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    //动画类型
    transition.type = kCATransitionPush;
    //动画方向
    transition.subtype = kCATransitionFromTop;
    [testView.layer addAnimation:transition forKey:nil];

    CAPropertyAnimation

    继承关系:CABasicAnimation,CAKeyframeAnimation -> CAPropertyAnimation -> CAAnimation

    CABasicAnimation

    CABasicAnimation * animation = [CABasicAnimation animation];
    animation.keyPath = @"position.y";
    
    //运动的绝对距离
    animation.fromValue = @77;
    animation.toValue = @455;
    
    //运动的相对距离
    //    animation.byValue = @222;
    
    animation.duration = 1;
    //留在最终状态
    animation.fillMode = @"forwards";
    //防止它被自动移除
    animation.removedOnCompletion = NO;
    animation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.5 :0 :0.9 :0.7];
    [testView.layer addAnimation:animation forKey:@"basic"];

    CAKeyframeAnimation 例一

    CAKeyframeAnimation * animation = [CAKeyframeAnimation animation];
    animation.keyPath = @"position.x";
    animation.values = @[@0,@10,@-10,@10,@0];
    //指定关键帧动画发生的时间
    animation.keyTimes = @[ @0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1 ];
    animation.duration = 0.4;
    //提前无需设置位置
    animation.additive = YES;
    [testView.layer addAnimation:animation forKey:@"shake"];

    CAKeyframeAnimation 例二

    CGRect boundingRect = CGRectMake(-150, -150,300, 300);
    
    CAKeyframeAnimation *orbit = [CAKeyframeAnimation animation];
    orbit.keyPath = @"position";
    //创建一个圆形的 CGPath 作为我们的关键帧动画的 path。
    orbit.path = CFAutorelease(CGPathCreateWithEllipseInRect(boundingRect, NULL));
    orbit.duration = 2;
    orbit.additive = YES;
    orbit.repeatCount = HUGE_VALF;
    //恒定速度
    orbit.calculationMode = kCAAnimationPaced;
    //确保沿着路径旋转
    orbit.rotationMode = kCAAnimationRotateAuto;
    [testView.layer addAnimation:orbit forKey:@"orbit"];

    CAAnimationGroup 组动画

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    animation.duration = 3.;
    animation.fromValue = @(0.1);
    animation.toValue = @(1.);
    
    CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];
    animation2.duration = 3.;
    animation2.fromValue = @(1);
    animation2.toValue = @(2.);
    animation2.beginTime = 3.;
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.duration = 6.;
    group.animations = @[animation,animation2];
    [testView.layer addAnimation:group forKey:nil];

    先就总结这么多,欢迎大家来补充。以后遇到更好也会写出来和大家分享

  • 相关阅读:
    java面试题之简单介绍一下集合框架
    java面试题之hashcode相等两个类一定相等吗?equals呢?相反呢?
    java面试题之什么是ThreadLocal?底层如何实现的?
    java面试题之stop()和suspend()方法为何不不推荐使⽤?
    设计模式—单例模式
    Java并发—同步容器和并发容器
    Java并发—并发工具类
    Java并发—原子类,java.util.concurrent.atomic包(转载)
    Java并发—java.util.concurrent.locks包
    Java并发—java.util.concurrent并发包概括(转载)
  • 原文地址:https://www.cnblogs.com/LeoTai/p/5493852.html
Copyright © 2020-2023  润新知