首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NSView中实现NSImage的拖动?

如何在NSView中实现NSImage的拖动?
EN

Stack Overflow用户
提问于 2013-05-07 02:39:44
回答 1查看 1.3K关注 0票数 0

我从来没有和NSViews打过交道,所以我对此感到困惑。我有一个包含NSImage ivar的自定义类。我还有一个NSView的子类,其中包含我的自定义类的实例数组。自定义类中的NSImage在创建时绘制在NSView的中心。我需要能够在NSView中自由地拖动该NSImage

我已经实现了以下方法来开始:

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

我尝试将自定义类中的NSImage对象放入数组中作为要拖动的项,但引发了异常。我还尝试创建一个NSDraggingItem放在那里,但它无法将对象写入粘贴板,并引发了一个异常。

代码语言:javascript
复制
-(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,并使用它在视图中自由移动它们,但是我无法让它与一个对象一起工作,也不知道如何正确地实现这个想法。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 00:26:35

在这个问题上经历了很多令人头疼的事情,但最终还是弄明白了。我使用的是dragImage:at:offset:event:pasteboard:source:slideBack:而不是beginDraggingSessionWithItems:event:source。我跟踪视图中每个图像的坐标,并通过使用我在mouseDown:中编写的以下方法来判断是否单击了某个特定图像

代码语言:javascript
复制
-(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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16405038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档