在展开/折叠动画后,基于NSOutlineView动态调整视图大小

时间:2016-03-04 22:21:59

标签: cocoa nsoutlineview

我使用NSOutlineView在时间轴中显示曲目的层次结构,非常类似于视频编辑包中的内容。当用户在大纲视图中展开/折叠项目时,滚动视图中的相应对象会显示和消失。

不幸的是,outlineViewItemDidCollapse:outlineViewItemDidExpand:委托方法在动画完成之前被调用,并且在大纲视图上调用frameOfCellAtColumn:只能获得该时刻的帧,而Cocoa仍然是动画它的[dis]外观。

作为一种解决方法,我使用performSelector:withObject:afterDelay:延迟100毫秒(就像这个Dynamically resize NSWindow based on NSOutlineView height有类似问题的人一样),但这并不完美(而且它&# #39;闻起来很糟糕)。动画并不总是在100ms内完成,任何更长的延迟都变得非常明显。

-(void)outlineViewItemDidExpand:(NSNotification *)notification
{
    // we need to delay the update to allow the outline view expand animation to
    // complete. Perhaps 0.1s isn't long enough in all cases, but any longer seems
    // too sluggish

    [self performSelector:@selector(updateSubviewsForTimeline:) withObject:timelineView afterDelay:0.1];
}

动画完成后,有什么方法可以挂钩outlineViewDidExpand|Collase:方法吗?或者,我可以在我的outlineViewDidExpand|Collase:方法中以某种方式处理动画本身,以便我可以在其上安装回调吗?

0 个答案:

没有答案