NSOutlineView从代码中展开/折叠动画

时间:2012-12-14 14:55:35

标签: cocoa core-animation nsoutlineview

我想知道一个动画 NSOutlineView树节点从代码的扩展/崩溃怎么样?

// this works ok but doesn't animate  

NSTreeNode *node = [self.outlineView itemAtRow:self.outlineView.clickedRow];

if([self.outlineView isItemExpanded:node])
{
    [self.outlineView.animator collapseItem:node];
}else{
    [self.outlineView.animator expandItem:node];
}

如果您通过默认绘制的箭头展开节点,则大纲视图会自然生成动画 所以有办法...

2 个答案:

答案 0 :(得分:11)

我的原始代码没问题,这在10.7

下无法使用

来自Application Kit Release Notes for OS X v10.8的原始文字:

NSOutlineView

以下方法现在支持通过-animator代理进行动画处理:-expandItem:, - expandItem:expandChildren:,--collapseItem:和-collapseItem:collapseChildren:。例如,为特定项目的扩展设置动画:[[outlineView animator] expandItem:item];

答案 1 :(得分:0)

问题很可能是node您传递给collapseItem:。您需要传递树控制器用来表示节点的对象,而不是数据模型中的实际节点。如果您正在使用NSTreeController,那么您需要遍历从-[NSTreeController arrangedObjects]返回的结构,以找到代表您的数据模型对象的节点。