문제

코코아 앱에서 컬러 피커를 구현하려고합니다. (예, Nscolorpanel에 대해 알고 있습니다. 나는 그것을별로 좋아하지 않습니다. 내 자신을 굴리는 요점은 내가 더 잘할 수 있다고 생각한다는 것입니다.)

다음은 내 피커의 현재 상태 사진입니다.

Custom viewness!
(원천: ryanballantyne.name)

컬러 휠을 둘러싼 우물은 Nscolorwell 서브 클래스입니다. 컬러 휠 클래스에서 AddSubview를 호출하여 프로그래밍 방식으로 인스턴스화되며 컬러 휠보기 (NSView 서브 클래스)에 추가됩니다.

나는 당신이 그들의 잡색 손잡이로 컬러 우물을 끌 수 있도록 그것을 만들고 싶습니다. 그 여정의 시작은 마우스가 핸들 위로 떠날 때 커서를 열린 손으로 바꾸는 것입니다. 슬프게도, 내 뷰의 대부분이 회전하기 때문에 커서 직장을 사용할 수 없습니다.. 그러므로 나는 무성한 이벤트를 사용하고 적중을 직접 수행해야합니다.

다음은 내가 작업하려는 마우스 이벤트 코드입니다.

- (void)mouseMoved:(NSEvent*)event
{
    NSLog(@"I am over here!\n");

    [super mouseMoved:event];

    NSPoint eventPoint = [self convertPoint:[event locationInWindow] fromView:nil];
    BOOL isInHandle = [grabHandle containsPoint:eventPoint];
    if (isInHandle && [NSCursor currentCursor] != [NSCursor openHandCursor])  {
        [[NSCursor openHandCursor] push];
    }
    else if (!isInHandle)  [NSCursor pop];
}

- (void)mouseEntered:(NSEvent*)event
{
    [[self window] setAcceptsMouseMovedEvents:YES];
}
- (void)mouseExited:(NSEvent*)event
{
    [[self window] setAcceptsMouseMovedEvents:NO];
    [NSCursor pop];
}

- (BOOL)acceptsFirstResponder
{
    return YES;
}
- (BOOL)resignFirstResponder
{
    return YES;
}

나는 내 사악한 방법이 호출되지 않았다는 것을 알았습니다. 입력 및 종료에 대한 Ditto. 그러나, 내가 Mousedown을 구현할 때, 그 중 하나입니다 하다 전화를 걸어, 적어도 일부 이벤트는 내가 원하는 이벤트가 아니라 나에게 도달하고 있습니다.

어떤 아이디어? 감사!

도움이 되었습니까?

해결책

마우스 센터 : 그리고 Mouseexited : 직접 시야에 들어가거나 나가는 것을 추적하지 마십시오. 그들은 당신이 당신의 견해에서 설정 한 모든 추적 영역을 입력/종료하는 추적을 추적합니다. 관련 방법은 다음과 같습니다 -addTrackingRect:owner:userData:assumeInside: 그리고 -removeTrackingRect:. 그냥 통과하십시오 [self bounds] 전체보기를 추적하려는 경우 첫 번째 매개 변수의 경우. 앱이 10.5+ 만 있으면 추적 영역 내에서만 마우스-감산 이벤트를 얻는 것을 직접 지원하므로 NstrackingArea를 사용해야합니다.

1) 추적 직장은 회전 된 뷰가있는 커서 렉터와 동일한 이상한 동작을 가지고 있으며, 2) 경계가 변경되면 (프레임만이 아니라) 추적 낙타를 다시 설정해야 할 것입니다. , 추적 릿의 태그를 저장하여 나중에 제거하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top