기본 도면 뷰가 작동했습니다. 현재 도면 뷰를 채우는 사용자 정의 뷰 위에 중첩 된 뷰 인 크기 프레임에서 작업하고 있습니다. 그 중 하나는 '아이 뷰'의 재배치를 허용하는 것입니다. 그러나 크기 프레임과 자식 뷰를 새 마우스 위치로 설정하는 올바른 값을 설정하고 있지만, 마우스를 빠르게보기가 끝나면 중간에 남겨집니다.NSView를 드래그 할 때 그립이 끊어짐
내가 추적하지 못하는 가속 정보가 있다고 가정하고 있지만 마우스를 계속 따라 잡기 위해 필요한 추가 단계를 찾을 수없는 것 같습니다. 여기
내가 내의 mouseDragged 이벤트에 사용하고 코드입니다 :-(void)mouseDragged:(NSEvent *)theEvent{
if(mouseDown){
if(isSizing){
NSPoint movement = [[self window] convertBaseToScreen:[theEvent locationInWindow]];
NSRect newRect;
switch (sizingDirection) {
case SIZING_DIR_UP:
//Moving up should increase height, moving down should decrease height
newRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height - (_yPos - movement.y));
break;
case SIZING_DIR_DOWN:
//Moving down should decrease height, moving down should increase height
newRect = CGRectMake(self.frame.origin.x, self.frame.origin.y + (movement.y - _yPos), self.frame.size.width, self.frame.size.height - (movement.y - _yPos));
break;
case SIZING_DIR_LEFT:
//Moving left should increase width, moving right should decrease width
newRect = CGRectMake(self.frame.origin.x + (movement.x - _xPos), self.frame.origin.y, self.frame.size.width - (movement.x - _xPos), self.frame.size.height);
break;
case SIZING_DIR_RIGHT:
//Moving right should decrease width, moving right should increase width
newRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width - (_xPos - movement.x), self.frame.size.height);
break;
default:
newRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width - (_xPos - movement.x), self.frame.size.height - (_yPos - movement.y));
break;
}
NSRect newElementRect = CGRectMake(newRect.origin.x + 6, newRect.origin.y + 6, newRect.size.width - 12, newRect.size.height - 12);
_xPos = movement.x;
_yPos = movement.y;
[self setFrame:newRect];
[self setNeedsDisplay:YES];
[_child setFrame:newElementRect];
[_child setNeedsDisplay:YES];
}else {
NSPoint movement = [[self window] convertBaseToScreen:[theEvent locationInWindow]];
NSRect newRect = CGRectMake(self.frame.origin.x + (movement.x - _xPos), self.frame.origin.y + (movement.y - _yPos), self.frame.size.width, self.frame.size.height);
NSRect newElementRect = CGRectMake(newRect.origin.x + 6, newRect.origin.y + 6, newRect.size.width - 12, newRect.size.height - 12);
_xPos = movement.x;
_yPos = movement.y;
[self setFrame:newRect];
[self setNeedsDisplay:YES];
[_child setFrame:newElementRect];
[_child setNeedsDisplay:YES];
}
}
}
mouseDown 및 isSizing 변수뿐만 아니라 나는의 mouseDragged에 비교를 할 수 있도록 _xpos 및 _ypos 처음 mouseDown 이벤트에 설정되어 이벤트를 생성하고 뷰의 위치를 업데이트하십시오.
누구에게 어떤 문제가 있는지 알 수 있습니까?