【发布时间】:2015-01-29 08:11:55
【问题描述】:
我对 iOS 中的动画工具了如指掌。 旋转、缩放和移动,但我的时机不好
例如,我有两个正方形,一个在左边,另一个在右边 我希望两个正方形旋转两个直到它们以角度相互碰撞 但由于时机不对,我没能做到
所以我的问题是他们的一个上帝教程来说明它
【问题讨论】:
标签: ios core-graphics core-animation
我对 iOS 中的动画工具了如指掌。 旋转、缩放和移动,但我的时机不好
例如,我有两个正方形,一个在左边,另一个在右边 我希望两个正方形旋转两个直到它们以角度相互碰撞 但由于时机不对,我没能做到
所以我的问题是他们的一个上帝教程来说明它
【问题讨论】:
标签: ios core-graphics core-animation
也许您可以查看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: 正如你所说,你有时间问题,以下指南帮助了我:
【讨论】:
您是否正在实施 UICollisionBehavior?如果是这样,请尝试禁用它。
【讨论】: