NSOutlineView滚动动画不起作用

时间:2013-05-13 06:42:39

标签: macos animation nsoutlineview

我想删除NSOutlineView的显示/隐藏按钮。因此,我覆盖NSOutlineView并获取mouseDown事件。以下是代码。

    -(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"LeftFolderListOutlineView mouseDown");
    [super mouseDown:theEvent];

    NSPoint localPoint = [self convertPoint:theEvent.locationInWindow
                                   fromView:nil];
    NSInteger row = [self rowAtPoint:localPoint];

    id clickedItem = [self itemAtRow:row];

    if (![clickedItem isKindOfClass:[NSDictionary class]]) {
        return;
    }


    if ([self isItemExpanded:clickedItem]) {

        [[self animator] collapseItem:clickedItem];

    }else{
        [[self animator] expandItem:clickedItem];
    }

}

当NSOutlineView崩溃或展开时,它应该是一个滚动动画。但在这种情况下,它不起作用。任何人告诉我为什么以及如何改进它?

1 个答案:

答案 0 :(得分:0)

要删除“显示/隐藏按钮”(轮廓单元格),您可以在NSOutliveView子类中实现- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row方法并返回NSZeroRect。

NSOutlineView折叠/展开动画无法通过animator制作动画。

仅OS 10.7或更高版本提供折叠/展开动画效果。因此,您计划支持需要提供单独实施的旧操作系统版本。

如果你想在OS 10.6或更低版本上提供折叠/展开动画,你肯定需要覆盖NSOutlineView的'drawRect'。

- 更新 -

对不起,我想我忽略了要点。 10.7扩展/折叠动画仅在用户单击轮廓单元格时自动启动。如果我们想要显示没有默认轮廓单元格的动画,我认为除了手动实现动画效果之外别无他法。

我制作了一个示例项目,通过图像绘制实现展开/折叠动画效果。 在此处查看源代码:https://github.com/roh0sun/ovanimation