2013-05-31 2 views
0

드로잉이 포함 된 NSScrollView가 있습니다. 드로잉은 NSView의 하위 클래스이며 드롭 타겟입니다. NSBox와 끌기 소스 인 dragBox라는 또 다른 클래스가 있습니다. NSScrollView의 크기를 벗어난 dragBox를 드래그 할 수 있도록 Drawing의 크기를 동적으로 변경할 수 있어야합니다. 현재 NSScrollView의 컨텐트 뷰에서 자동으로 스크롤되는 "핫 영역"을 정의합니다. 문제는 dragBox를 놓을 때 방금 만든 가상 공간에 놓지 않는다는 것입니다. 그것은 뷰포트의 크기에 비례하여 그것을 버립니다. 여기에 코드가 있습니다.끌어서 놓은 컨트롤을 기반으로 NSScrollView를 동적으로 스크롤하는 방법

@implementation Drawing 


-(NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender // validate 
{ 
NSLog(@"Updated"); 
_drawHintPoint = [sender draggedImageLocation]; 

if ([sender draggingLocation].x > [[self superview] bounds].size.width - 30) 
{ 
    NSRect scrollRect = NSMakeRect(0,0, [self bounds].size.width + 30, [self bounds].size.height) ; 
    [self setFrame:scrollRect]; 
    _drawHintPoint = NSMakePoint([self bounds].size.width + 30, [sender draggingLocation].y); 
    [self scrollPoint:_drawHintPoint]; 

} 





return NSDragOperationEvery; 

} 





-(BOOL) prepareForDragOperation:(id<NSDraggingInfo>)sender 
{ 
NSLog(@"Prepared"); 
return YES; 

} 
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender { 

NSLog(@"Move Box"); 
NSPoint pt = _drawHintPoint; 
pt.x = pt.x - 32; 
pt.y = pt.y - 32; 
[[_ico box] setFrameOrigin:pt]; 
return YES; 
} 


- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender { 
NSLog(@"Drag Entered"); 


_drawHintPoint = NSMakePoint(0, 0); 



return NSDragOperationEvery; 

} 

제공된 가상 공간에 dragBox를 놓을 수있는 방법은 무엇입니까?

브루스

답변

1

해결! 당신은 스크롤 뷰에 좌표를 끌어 위치를 변환 할 필요가

_drawHintPoint = [[self superview] convertPoint:[sender draggingLocation] fromView:nil]; 

:

는 draggingUpdated,이 트릭을했다. 위의 줄에서 [self superview]는 NSClipRect를 참조합니다.