기본 NSBezierPath 메서드를 사용하여 화면에 직사각형을 그립니다. 오브젝트의 각 인스턴스가 초기화 된 상태에서 화면에 사용자 정의 직사각형을 그리도록 오브젝트를 설정했습니다. 그 객체에서 마우스를 사용하여 사각형을 화면 위로 드래그 할 때 사각형을 움직이는 방법이 있습니다. 이를 수행하기 위해 간단히 mouseDragged:
메소드를 사용했습니다. 문제는 내가 움직이면 이전에 사각형이 있던 곳의 가장자리를 따라 화면에 얇은 1px 줄로 나타나는 "이미지 인공물"뒤에 남겨 둡니다. 이 방법은 Microsoft Windows가 느리게 실행될 때 윈도우를 드래그 할 때 윈도우의 유령을 그대로 두는 것과 유사합니다. 화면이 풀리기 전에 항상 물건을 그리거나 전체 화면을 채우는 방법을 기억하십니까? 그것의 그것처럼 그냥 충분히 빨리 또는 뭔가 다시 그리기. 아티팩트는 그 위에 사각형을 드래그하는 등의 작업을 통해 무언가를 그어 제거하지 않으면 사라지지 않습니다.코어 그래픽을 사용하여 다시 그릴 때 Objective-C 이미지 아티팩트를 제거하는 방법
-(void)mouseDown:(NSEvent *)theEvent{
mouseLoc = [theEvent locationInWindow];
xDifference = mouseLoc.x - origin.x;
yDifference = mouseLoc.y - origin.y;
}
-(void)mouseDragged:(NSEvent *)theEvent{
mouseLoc = [theEvent locationInWindow];
NSPoint adjustedOrigin = NSMakePoint((mouseLoc.x-xDifference), (mouseLoc.y-yDifference));
[self setOrigin:adjustedOrigin];
}
파란색 직사각형의 왼쪽에있는 빈 사각형에 대해 궁금한 점이 있으면 설명 할 수도 없습니다. 나는 흑인 '마름모'가 지름 30px의 원으로 둘러 쌓여 있지만, 한 공간 (NSTimer에서 1 초)을 움직일 때마다 아주 짧은 순간에 그 지점으로 점프하지만 왜 단서가 없는지. 직사각형의 움직임에 대한 코드는 다음과 같습니다.
i+=.5;
int rectangle2X = (100+30*cos(i));
int rectangle2Y = (100+30*sin(i));
//NSLog(@"(%d, %d)", rectangle2X, rectangle2Y);
rectangle2.origin = NSMakePoint(rectangle2X, rectangle2Y);
도움이 될 것입니다. 위의 코드가 여러분이 필요로하는 모든 것이 아니므로 더 많은 것을 요구할 수 있습니다. 맨 위 코드는 객체의 코드이며, 맨 아래 코드는 AppDelegate에서 가져옵니다. 그림의 두 사각형 모두 내 객체의 인스턴스입니다.
답변 해 주셔서 감사합니다. 나는 이런 식으로 내 코드에 통합했다. – SeniorShizzle