2012-06-15 3 views
0

popover에 UIActionSheet를 표시해야하며이 팝 오버에는 Cocos2D의 요소를 가리키는 화살표가 있습니다.Cocos2D 2.0 - boundingBox 좌표를 디렉터 뷰 공간으로 변환

이 요소의 boundingBox rect를 UIActionSheet가 표시 될 디렉터 뷰 좌표로 계산해야하므로 작업 시트 화살표가이를 가리키고 있습니다.

어떻게하면됩니까?

답변

2

작성한 빠른 샘플입니다. UIPopoverController를 UIActionSheet로 변경하십시오.

CCNode* node = (CCNode *)sender; 
CGPoint worldPoint = [node convertToWorldSpace:CGPointZero]; 
CGRect rect = [sender boundingBox]; 
rect.origin = worldPoint; 
// Convert position based on Apple's anchor point from cocos2d's anchor point 
rect.origin.y = rect.origin.y + rect.size.height; 
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToUI:ccp(rect.origin.x, rect.origin.y)]; 
rect.origin = convertedLocation; 

UIViewController* viewController= [[UIViewController alloc] init]; 
[[viewController view] setBackgroundColor:[UIColor greenColor]]; 
UIPopoverController* c = [[UIPopoverController alloc] initWithContentViewController:viewController]; 
[c presentPopoverFromRect:rect inView:[[CCDirector sharedDirector] view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
+0

아니요. 이것은 나에게 올바른 좌표를주지 않는다. X는 다소 옳은 것처럼 보이지만 Y는 완전히 잘못되었습니다. – SpaceDog

+0

참고 :이 스프라이트는 레이어 내부에있는 다른 스프라이트 내부에 있습니다 ... 다른 점이 있습니까? – SpaceDog

+1

예, 경계 상자가 다른 좌표를 반환합니다. 스프라이트에서이 레이어를 주 레이어에서 사용하십시오. 그것이 맞는지 보자. –