2012-03-12 1 views
2

튀는 공 주위로 회전하는 데 문제가 있습니다.iPad에서 튀는 공 주위로 UIView 회전하기

지금까지 ViewController 내에 2 개의 UIView가 있습니다. 뷰 중 하나에는 쿼츠가 그려진 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을 사용하여 프레임이 그려지는 것을 시도했지만, 다시 같은 일이 일어났습니다.

또한 공은 60fps로 설정된 스텝 타이머로 움직입니다.

죄송합니다. 정말 모호하고 도와 줄 수있는 사람 덕분입니다.

건배,

제임스

답변

0

당신은 단지 부모 뷰 내부의 모든 것을 (프레임 경로 및 공을) 넣을 수 있어야하고 회전이 해당 뷰 변환을 적용한다. 이렇게하면 모든 하위 뷰의 좌표계가 함께 회전하고 모든 것이 원하는대로 회전해야합니다. 당신이하려고하는 것보다 훨씬 간단합니다.

+0

프레임의 회전이 볼의 경로에 전혀 영향을주지 않아야합니다. 상위 뷰를 회전하면 프레임과 볼이 모두 영향을받습니다. 이전에이 코드를 변경하여 두 UIView의 Layer 내에서 CAShaplayers가 모두 유지되도록했습니다. 난 그냥 프레임에 shapelayer에 대한 CATransform을 사용합니다. 한가지는 프레임을 선명한 색상으로 설정 한 다음 회전 시키면 공에 아무런 문제가 발생하지 않는다는 것입니다. OpenGL에서 모든 그래픽을 학습하고 다시 작성하는 데 일주일을 보냈고 같은 일이 일어났습니다! – GCBenson