2012-03-12 74 views
2

我在圍繞彈跳球旋轉視圖時遇到了問題。圍繞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動畫。

對不起,如果這真的模糊,並感謝任何人可以幫助。

乾杯,

詹姆斯

回答

0

你應該能夠只是把父視圖中的一切(框架路徑和球),然後申請一個旋轉變換到了這一觀點。這將一起旋轉所有子視圖的座標系,並且所有內容都應該按照您希望的方式旋轉。比你想要做的要簡單得多。

+0

框架的旋轉根本不應該影響球的路徑。如果我旋轉父視圖,那麼框架和球都會受到影響。我以前更改過這個代碼,以便兩個都是在一個UIView層中的CAShaplayers。我只在框架上使用了一個CATransform。一件事是,如果我將框架設置爲一個清晰的顏色,那麼旋轉它就不會造成球的問題。我甚至花了一個星期的時間學習和重寫opengl中的所有圖形,發生了同樣的事情! – GCBenson 2012-05-17 20:29:45