2012-03-21 4 views
0

기본 도면 뷰가 작동했습니다. 현재 도면 뷰를 채우는 사용자 정의 뷰 위에 중첩 된 뷰 인 크기 프레임에서 작업하고 있습니다. 그 중 하나는 '아이 뷰'의 재배치를 허용하는 것입니다. 그러나 크기 프레임과 자식 뷰를 새 마우스 위치로 설정하는 올바른 값을 설정하고 있지만, 마우스를 빠르게보기가 끝나면 중간에 남겨집니다.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 이벤트에 설정되어 이벤트를 생성하고 뷰의 위치를 ​​업데이트하십시오.

누구에게 어떤 문제가 있는지 알 수 있습니까?

답변

0

마우스가보기를 떠나 자마자 페이드 아웃되도록 설정된보기를 끌 때 동일한 문제가 발생합니다. 드래그를 시작했을 때 YES으로 설정되고, 마우스 오른쪽 버튼 이벤트가으로 설정되어 있기 때문에보기를 숨기기 전에 isDraggedNO으로 설정되어 있는지 확인해야합니다.

어쩌면 이것은 당신의 경우는 아니지만, 어떻게 든 당신을 도울 수 있기를 바랍니다.

관련 문제