2013-05-06 77 views
0

我從來沒有處理過很多與NSViews,所以我在這方面的損失。我有一個自定義類,其中包含一個NSImage伊娃。我也有一個NSView的子類,其中包含我的自定義類的實例數組。自定義類的NSImage在創建時被繪製在NSView的中心。我需要能夠自由地圍繞NSView拖動NSImage如何實現在NSView中拖動NSImage?

我已實現了以下方法開始:

-(void)mouseDown:(NSEvent *)theEvent 
{ 
    [self beginDraggingSessionWithItems: /* I don't know what to put here */ 
            event:theEvent 
           source:self]; 
} 

我試圖放置NSImage對象從我的自定義類的數組作爲項目拖,但將引發異常。我也嘗試創建一個NSDraggingItem放置在那裏,但它不能將對象寫入粘貼板並引發異常。

-(void)draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint 
{ 
    NSLog(@"began"); 
} 

-(void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint 
{ 
    NSLog(@"moved"); 
} 

-(void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation 
{ 
    NSLog(@"ended"); 
} 

這些方法得到正確稱爲我點擊並拖動我的鼠標在我的NSView子但它們是無用的,直到我能得到要移動的對象。

我相信答案可能是爲每個圖像創建一個NSDraggingItem,然後使用它在視圖中自由移動它們,但是我無法使它適用於一個對象,也不知道如何正確實現此想法。任何幫助表示讚賞。

回答

0

在這一個上經歷了很多頭痛,但終於弄清楚了。而不是使用beginDraggingSessionWithItems:event:source我用dragImage:at:offset:event:pasteboard:source:slideBack:。我跟蹤每個圖像的座標在視圖中,可以告訴是否被點擊一個特定的圖像或不使用下面的方法我在mouseDown:

-(BOOL)clickedAtPoint:(NSPoint)point InsideRect:(NSRect)rect 
{ 
    if ((point.x < (rect.origin.x + rect.size.width) && 
     point.y < (rect.origin.y + rect.size.height)) && 
     point.x > rect.origin.x && point.y > rect.origin.y) { 
      return YES; 
     } 
    return NO; 
} 
+6

'拖動圖像中寫道:在:偏移:事件:紙板:來源:slideBack:從10.10 SDK開始已棄用。 – 2014-07-07 06:55:47