我使用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:
方法中以某种方式处理动画本身,以便我可以在其上安装回调吗?