【问题标题】:Animation Direction on iOS [closed]iOS上的动画方向[关闭]
【发布时间】:2015-01-29 08:11:55
【问题描述】:

我对 iOS 中的动画工具了如指掌。 旋转、缩放和移动,但我的时机不好

例如,我有两个正方形,一个在左边,另一个在右边 我希望两个正方形旋转两个直到它们以角度相互碰撞 但由于时机不对,我没能做到

所以我的问题是他们的一个上帝教程来说明它

【问题讨论】:

    标签: ios core-graphics core-animation


    【解决方案1】:

    也许您可以查看this 链接。由于 Your Tags 建议您为此使用 CoreAnimation,您可以链接动画。

    您可以有一个固定的移动水平和一个嵌套动画,具有相同的旋转持续时间。我就是这样做的。

    更新: 下面是一些非常适合我的代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 70.0, 30.0, 30.0)];
        leftView.backgroundColor = [UIColor redColor];
        [self.view addSubview:leftView];
    
        UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.size.width, 50.0, 50.0, 50.0)];
        rightView.backgroundColor = [UIColor blueColor];
        [self.view addSubview:rightView];
    
        [self moveViewLeft:leftView];
        [self moveViewRight:rightView];
    
    }
    
    - (void)moveViewLeft:(UIView *)view {
    
        float duration = 1.0;
    
        // Moving
        CABasicAnimation *moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
        moveAnimation.fromValue=[NSValue valueWithCGPoint:CGPointMake([view center].x, [view center].y)];
        moveAnimation.toValue=[NSValue valueWithCGPoint:CGPointMake([view center].x+self.view.frame.size.width/2-view.frame.size.width, [view center].y)];
        moveAnimation.duration = duration;
        moveAnimation.speed = 1.0;
        moveAnimation.fillMode = kCAFillModeForwards;
        moveAnimation.removedOnCompletion = NO;
    
        // Rotation
        CABasicAnimation* rotationAnimation;
        rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        rotationAnimation.toValue = [NSNumber numberWithFloat: ((360*M_PI)/180)];
        rotationAnimation.duration = duration+0.5;
        rotationAnimation.speed = 1.5;
        rotationAnimation.fillMode = kCAFillModeForwards;
        rotationAnimation.removedOnCompletion = NO;
    
        // Combining Animations
    
        CAAnimationGroup *anim = [CAAnimationGroup animation];
        anim.animations = [NSArray arrayWithObjects:moveAnimation, rotationAnimation, nil];
        anim.duration = duration;
        anim.fillMode = kCAFillModeForwards;
        anim.removedOnCompletion = NO;
    
        [view.layer addAnimation:anim forKey:nil];
    
    }
    
    - (void)moveViewRight:(UIView *)view {
    
        float duration = 1.0;
    
        // Moving
        CABasicAnimation *moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
        moveAnimation.fromValue=[NSValue valueWithCGPoint:CGPointMake([view center].x, [view center].y)];
        moveAnimation.toValue=[NSValue valueWithCGPoint:CGPointMake([view center].x-self.view.frame.size.width/2, [view center].y)];
        moveAnimation.duration = duration;
        moveAnimation.speed = 1.0;
        moveAnimation.fillMode = kCAFillModeForwards;
        moveAnimation.removedOnCompletion = NO;
    
        // Rotation
        CABasicAnimation* rotationAnimation;
        rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        rotationAnimation.toValue = [NSNumber numberWithFloat: ((360*M_PI)/180)];
        rotationAnimation.duration = duration+5;
        rotationAnimation.speed = 1.5;
        rotationAnimation.fillMode = kCAFillModeForwards;
        rotationAnimation.removedOnCompletion = NO;
    
        // Combining Animations
    
        CAAnimationGroup *anim = [CAAnimationGroup animation];
        anim.animations = [NSArray arrayWithObjects:moveAnimation, rotationAnimation, nil];
        anim.duration = duration;
        anim.fillMode = kCAFillModeForwards;
        anim.removedOnCompletion = NO;
    
        [view.layer addAnimation:anim forKey:nil];
    
    }
    

    更新 2: 我改变了旋转的持续时间和速度。现在它看起来像您的示例动画。两个正方形现在彼此适合。

    更新 3: 正如你所说,你有时间问题,以下指南帮助了我:

    • 旋转的持续时间应该等于速度。
    • 持续时间和速度应该是移动动画的持续时间和速度的 150%。

    【讨论】:

    • 我知道如何安排时间,但我的问题是选择最佳时间
    • 我添加了一些适合我的代码
    • 感谢 Man 的教程,但我不想要一些我想要的代码 了解如何把握好时机
    • 学习时机有点难。它涉及一些数学,也许还有物理学。对于您的示例,我添加了另一个更新,其中包含其工作原理指南。也许它可以帮助您找到正确的方法。
    【解决方案2】:

    您是否正在实施 UICollisionBehavior?如果是这样,请尝试禁用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      相关资源
      最近更新 更多