2012-03-20 3 views
1

화면의 클릭 위치를 얻기 위해 -mouseDown : 이벤트를 처리하는 NSView 하위 클래스가 있습니다. 이 위치를 사용하여 -drawRect에 rect를 그리는 데 사용할 점을 정의했습니다. 제대로 작동합니다.설정시 버그 -setWantsLayer : on Lion

하지만 ... 내가 원하는 레이어를 설정할 때 일이 작동하지 않습니다. 내가 입력의 위치를 ​​얻었을 때 나는 Y 축이 20 포인트 증가했다. 나는 무엇이 일어나고 있는지 모른다 ... 아무도 설명 할 수 있나? 이 문제를 어떻게 해결합니까?

시뮬레이션 :

난에서 X 좌표를 클릭 : 100; y : 100; drawRect는 x : 100에 rect를 그립니다. y : 100; 괜찮아, 내가 원하는거야. setWantsLayer 함께

: YES

I에서 X 좌표가 클릭 (100); y : 100; drawRect는 x : 100에 rect를 그립니다. y : 120; (또는 이와 비슷한 것)

가능 -setWantsLayer를 YES로 설정하지 않고 CALayers를 사용할 수 있습니까? 나는 이것을 알아 내려고 노력하고 있지만 무슨 일이 일어나는지 전혀 모른다 ... 나는 당신의 도움이 필요하다.

업데이트 : 지금이 문제를 해결하려고 노력 중입니다 ... 이제 문제는 -mouseDown : NSView에서 설정할 때 -setWantsLayer를 YES로 설정하면됩니다. 더 이상 예상대로 작동하지 않습니다 ...

내 창에 CustomView가 있고 NSView의 하위 클래스를 만들고 CustomView 클래스로 설정했습니다. CustomView는 (0, 20) 위치에 있습니다. 좌표 방향이 반전되지 않습니다.

NSView가 -mouseDown 레이어를 원할 때 프레임을 위치 (0, 0) (또는 다른 말로하면 NSWindow 프레임을 얻습니다) 대신 (0, 20)으로 업데이트한다고 믿습니다. -mouseDown에서 모든 위치가 발생할 때 : Y 축에서 20 포인트 증가합니다. 내가 말하는 것이 옳은지 나는 모른다. 그러나 나는 나의 시험의 결과로 얻고있는 사실이다.

누군가 이것을 이해하는 데 도움이 될 수 있습니까?

답변

1

이제 (#macdev @ frenoode)의 mikeash의 도움으로이 질문을 해결했습니다.

문제점은 -mouseDown : event에서 포인트 리턴을 변환하는 방법이었습니다. -convertPointFromBacking을 사용하고 있었고 mikeash와 같이 말했습니다. "문제는 -convertPointFromBacking : locationInWindow에서 반환 된 포인트를 변환하는 것이 정확하지 않습니다."입니다. "locationInWindow가 '픽셀 정렬 보조 저장소 좌표계'에 있지 않으므로"

-convertPoint : fromView : like :로 변경되었습니다. [보낸 사람 convertPoint : [mEvent locationInWindow] fromView : nil]; 그리고 그것은 멋지게 작동합니다!

mikeash에 감사드립니다.

그리고 나는 같은 질문으로 다른 사람들을 돕기 위해 여기에 답변을 게시하고 있습니다.