我在旋转弹跳球时遇到问题。
到目前为止,我在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。
对不起,如果那真的很模糊,感谢任何可以提供帮助的人。
干杯,
詹姆斯
答案 0 :(得分:0)
您应该能够将所有内容(框架路径和球)放在父视图中,然后将旋转变换应用于该视图。这会将所有子视图的坐标系统一起旋转,一切都应该按照您想要的方式旋转。比你想做的要简单得多。