我在圍繞彈跳球旋轉視圖時遇到了問題。圍繞iPad上的彈跳球旋轉UIView
到目前爲止,我在ViewController中有2個UIViews。其中一個觀點包含一個CALayer,上面有一個石英球。另一個視圖包含一個方形框架的貝塞爾路徑。球在框架內彈跳。這一切工作正常。
問題是我已經實現了一個系統,允許用戶使用平移手勢旋轉框架。這實際上工作得很好,除了當框架旋轉時,球的路徑開始彎曲,當它應該直線前進時。所有的碰撞檢測仍然有效,只是受到影響的球的路徑。一旦停止旋轉,一切正常。我無法弄清楚爲什麼。
我使用這段代碼旋轉框:
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));
}];
但我得到了同樣的probem。我也嘗試在CALayer上使用CATransform3D
來繪製框架,但同樣的事情發生了。
此外,球由步進計時器設置爲60 fps動畫。
對不起,如果這真的模糊,並感謝任何人可以幫助。
乾杯,
詹姆斯
框架的旋轉根本不應該影響球的路徑。如果我旋轉父視圖,那麼框架和球都會受到影響。我以前更改過這個代碼,以便兩個都是在一個UIView層中的CAShaplayers。我只在框架上使用了一個CATransform。一件事是,如果我將框架設置爲一個清晰的顏色,那麼旋轉它就不會造成球的問題。我甚至花了一個星期的時間學習和重寫opengl中的所有圖形,發生了同樣的事情! – GCBenson 2012-05-17 20:29:45