在iPad上围绕弹跳球旋转UIView

时间:2012-03-12 15:11:08

标签: objective-c ipad uiview rotation cgaffinetransform

我在旋转弹跳球时遇到问题。

到目前为止,我在ViewController中有2个UIViews。其中一个视图包含一个CALayer,上面有一个球形的石英图。另一个视图包含方框的bezier路径。球在框架内反弹。一切正常。

问题在于我已经实现了一个允许用户使用平移手势旋转框架的系统。这实际上也很有效,除了当框架旋转时,球的路径开始弯曲,当它应该沿直线前进时。所有的碰撞检测仍然有效,只是受到影响的球的路径。一旦旋转停止,一切正常。我无法弄清楚原因。

我正在使用这段代码来旋转框架:

CGFloat translation = 250;
NSArray *temp = [[outer layer] sublayers];
CAShapeLayer *layer = [temp objectAtIndex:0];
UIBezierPath *newPath = [UIBezierPath bezierPathWithCGPath:layer.path];
[newPath applyTransform:CGAffineTransformMakeTranslation(-translation, -translation)];
[newPath applyTransform:CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter))];
[newPath applyTransform:CGAffineTransformMakeTranslation(translation, translation)];
layer.path = newPath.CGPath;

可能不是最聪明的做法,但说实话,我真的不知道自己在做什么!

我尝试使用以下方式旋转UIView:

[UIView animateWithDuration:0.1 animations:^{
    frame.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter));
     }];

但我得到了同样的探索。我也尝试在CALayer上使用CATransform3D绘制框架,但同样的事情也发生了。

此外,球由步进计时器设定动画,设定为60 fps。

对不起,如果那真的很模糊,感谢任何可以提供帮助的人。

干杯,

詹姆斯

1 个答案:

答案 0 :(得分:0)

您应该能够将所有内容(框架路径和球)放在父视图中,然后将旋转变换应用于该视图。这会将所有子视图的坐标系统一起旋转,一切都应该按照您想要的方式旋转。比你想做的要简单得多。