macos - 如何根据拖动的控件动态滚动NSScrollView

标签 macos cocoa cocoa-design-patterns

我有一个包含绘图的 NSScrollView。 Drawing 是 NSView 的子类,并且是放置目标。我有另一个名为 DragBox 的类,它是一个 NSBox 和一个拖动源。我希望能够动态更改绘图的大小,以适应将dragBox 拖动到NSScrollView 大小之外。目前,我在 NSScrollView 的内容 View 中定义了一个自动滚动的“热区域”。问题是,当我放下 DragBox 时,它不会将其放入刚刚创建的虚拟空间中。它相对于视口(viewport)的大小下降。这是代码。

@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 以便将其放入提供的虚拟空间中?

布鲁斯

最佳答案

解决了!

在 DraggingUpdated 中,这成功了:

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

您需要将拖动位置转换为 ScrollView 中的坐标。上行中的[self superview]指的是NSClipRect。

关于macos - 如何根据拖动的控件动态滚动NSScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16854151/

相关文章:

c++ - 是否有适用于 MacOS 的免费 C++ 编译器?

macos - -bash : rvictl: command not found, Mac book pro OS X 10.7.5和Xcode 4.6

cocoa - addToolTipRect,但是 "modifyToolTipRect"在哪里

cocoa - Cocoa 中的 MVC 设计 - 这三者总是必要的吗?还有 : naming conventions, Controller 放在哪里

objective-c - objective-c : Protocol + Delegate to pass data back from Login form in a Modal View to an tab bar controller view

c - 在 Mac OS X 中如何在硬件级别访问以太网端口的 I/O?

objective-c - 拖出以删除项目

objective-c - 如何将图像设置为 NSButton 以随按钮一起调整大小?

macos - 获取我的 Mac 计算机名称

macos - LibPNG + Boost::GIL: 找不到 png_infopp_NULL