2009-07-23 4 views
3

나는Cocoa에서 원형 뷰 위로 마우스를 가져 가면 커서를 변경하는 가장 좋은 방법은 무엇입니까?

내가 원형 정의 NSView의 서브 클래스가 있고, 나는 마우스가보기의 원형 부분 유혹되는 커서의 모양을 변경하려면,하지만하지 않을 경우 부분 이상 수행 할 작업 원의 바깥쪽에있는 뷰의 사각형입니다.

Here's an illustration. 이미지 태그로 인라인을 만들었지 만 멋진 기능을 추가하기에는 너무 새롭습니다. 내가 아는 어떤

지금까지

나는 NSCursor을 통해 커서의 모양을 변경하는 방법을 알고있다. 직사각형 뷰에서이 작업을 수행하는 가장 좋은 방법은 커서 사각형을 사용하는 것입니다. mouseEntered 및 mouseExited를 사용하여 mouseMoved 이벤트를받을 수 있으며 마우스가이 뷰 위에 있지 않을 때 마우스를 끌 필요가 있음을 알고 간단하고 저렴한 방법으로 관심 영역에 포인트가 있는지 판단 할 수 있습니다.

그러면 문제는 무엇입니까?

내가 알 수있는 한, 시스템은 mouseMoved 이벤트를 첫 번째 응답자가 아닌보기로 보내지 않습니다. 따라서 마우스가 내 뷰 위로 마우스를 가져갈 때 mouseMoved 이벤트를 가져 오려면 firstResponder 상태를 현재 가지고있는 사람에게서 훔쳐 야합니다. 텍스트보기에 포커스가있는 경우 마우스를 해당보기 위로 이동 시키면 마우스를 훔쳐 버릴 수 있습니다. 유용성의 관점에서는 용납 될 수 없습니다.

따라서 제 질문은 다음과 같습니다. 더 좋은 방법이 있습니까? 첫 번째 응답자가 아니더라도 mouseMoved 이벤트를 얻을 수 있습니까?

감사합니다.

다음 태그를 추가했을 것입니다. custom-views mouse-events NSCursor firstResponder 하지만 다시, 저는 SA noob입니다.

답변

2

네가 NSView의 acceptsFirstResponder 메소드를 오버라이드하여 YES를 리턴 할 필요가 있을지도 모른다. 그렇지 않으면 뷰에 이벤트 정보가 수신되지 않습니다.

+0

실제로 그렇습니다. 감사! –

1

원형 영역이어야합니까? 보기의 직사각형 범위 내 어디에서나 허용되는 경우 cursor rect을 사용할 수 있습니다.

+0

슬프게도이 지역의 원형은 비협조적입니다. 다행히 mouseMoved 이벤트를 사용하여 적중 감지를 수행하고 mouseEntered 및 mouseExited 메서드를 사용할 필요가 없을 때이를 해제하는 것이 좋습니다. –

관련 문제