首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖放动画反冲回源

拖放动画反冲回源
EN

Stack Overflow用户
提问于 2014-03-01 04:06:17
回答 1查看 226关注 0票数 1

将动画从一个NSTableView拖放到另一个窗口的NSTextView会返回到源代码视图,而不是文本视图。拖放操作可以正常工作,否则我的数据将被粘贴。我的NSTextView的子类拥有所有的拖放协议方法(参见下面的代码)。可能出了什么问题?

代码语言:javascript
复制
- (void)awakeFromNib { // Adjust default insets
[self setTextViewInset];
[self registerForDraggedTypes:[NSArray arrayWithObjects:AWNDragNDropGeneralRuleRecordType, nil]]; 
[self registerAsObserver];
}

- (void)registerAsObserver
{
    [self addObserver:scrollerSubclass
           forKeyPath:@"focused"
              options:NSKeyValueObservingOptionNew
              context:NULL];
}

- (BOOL)acceptsFirstResponder
{
    NSLog(@"Accepting");
    [self setFocused:YES];
    return YES;
}

- (BOOL)resignFirstResponder
{
    NSLog(@"Resigning");
    [self setFocused:NO];
    [super resignFirstResponder]; // Otherwise cursor remains in textView
    return YES;
}

- (BOOL)becomeFirstResponder
{
    NSLog(@"Becoming");
    return YES;
}

- (void)setFocused:(BOOL)x
{
    NSLog(@"-setFocused: is called with %d",x);
    focused = x;
}


- (BOOL)focused
{
    NSLog(@"-focused: is returning %d",focused);
    return focused;
}


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


- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
    NSLog(@"draggingEntered:");
    if ([sender draggingSource] == self) {
        return NSDragOperationNone;
    }

    return NSDragOperationCopy;
}


- (void)draggingExited:(id <NSDraggingInfo>)sender
{
    NSLog(@"Draging Exited:");
    [self setNeedsDisplay:YES];
}


- (void)draggingEnded:(id < NSDraggingInfo >)sender
{
    [self performDragOperation:sender];     
}

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{ // Look for drag source in 'SpellRuleFiles.SpellRulesWindowDelegate tableView delegate method
    NSPasteboard *pb = [sender draggingPasteboard];

    if (![self readFromPasteboard:pb]) {
        NSLog(@"Error: Could not read from dragging pasteboard");
        NSLog(@"performDragOperation NO");
        return NO;
    }
    NSLog(@"performDragOperation YES");
    return YES;
}


- (BOOL)readFromPasteboard:(NSPasteboard *)pb 
{ // Source of paste data is 'SpellRuleFile's ' 

    // I'm not showing this code

    return YES;     
}

- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
    NSLog(@"conclude drag operation:");
    [self setNeedsDisplay:YES];
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-02 07:35:48

在-prepareForDragOperation中:你想设置sender.animatesToDestination = NO,在这种情况下,被拖拽的东西在你放下它们时就会消失,而不是往回缩。

或者,如果你想要更好但更复杂的东西,你可以使用-enumerateDraggingItemsWithOptions:etc:etc:遍历放到文本视图中的每一项,并适当地设置它们的draggingFrame,在这种情况下,被拖动的东西将动画显示到你选择的最终目的地。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22104828

复制
相关文章

相似问题

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