2013-05-06 50 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