同时旋转和改变视图的位置?

时间:2017-02-20 12:43:45

标签: ios objective-c animation rotation transform

我有一个应用程序,我需要重现骰子动画。每当骰子滚动时,我应该改变他在X轴上的位置和他的旋转。

骰子是UIButton里面的UIView,大16个像素!当用户滚动时,我创建一个用于旋转的动画,同时我为X视图值的更改设置动画。动画结束后,我尝试修复随机停止位置。

看看我的代码,以便更好地理解。

这是我的旋转动画:

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 0.2;
animation.repeatCount = 2;
[dice.layer addAnimation:animation forKey:@"SpinAnimation"];

int min = -20;
int maxim = 20;
int rndValue = min + arc4random() % (maxim - min);

// Here I change x value;
CGRect rct = dice.superview.frame;
rct.origin.x = n + rndValue;
rct.size.width = dice.superview.bounds.size.width;
rct.size.height = dice.superview.bounds.size.height;
[UIView animateWithDuration:0.4 animations:^{
     dice.superview.frame = rct;
}completion:^(BOOL finished){
     //Here, after the animation is done, i want to put a random rotation value.
     float degrees = arc4random() % 30;
     dice.superview.layer.anchorPoint = CGPointMake(0.5, 0.5);
     dice.superview.transform = CGAffineTransformMakeRotation(degrees * M_PI/180);
}];

我的问题不仅是每次(当我滚动时预期第一个)骰子(视图也会)变小,因为视图框架的大小正在改变,我无法找到问题或任何其他解决方案。 PS:如果我只使用其中一个(旋转或改变X轴值),骰子保持相同的大小。

我在线搜索了很多但对我没用。有人有想法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我终于找到了我的问题的答案,我在这里发布我的解决方案,也许其他人会遇到同样的问题。

问题变成骰子移动了。 当我移动骰子时,我改变它的框架,这是我的错误。如果你改变骰子的中心点,问题就解决了

将帧动画更改替换为:

[UIView animateWithDuration:0.4 animations:^{
    dice.superview.center = CGPointMake((self.view.frame.size.width - CGRectGetMaxX(imageBack.frame)) / 2 + rndValue + CGRectGetMaxX(imageBack.frame), dice.superview.center.y);
}completion:^(BOOL finished){

}];

无论如何,有我的价值观......你可以放任何你想要的东西!

希望有所帮助