当用户选择一个单元格时,我想打开一个覆盖窗口(弹出窗口),NSTableView
类似于在 iCal 中选择一个事件。在 iCal 中选择事件会显示一个编辑事件的窗口,但这样做是通过平滑地为打开的窗口设置动画并在基础日历中添加一个指向偶数的箭头来实现的。有谁知道这里用的是什么?这是一堆隐藏/自定义的 API 还是可供公众使用?
3 回答
编辑器窗格似乎是一个自定义的无边框透明窗口,带有自定义视图(视图定义了形状,因此也定义了它投射的阴影)。在这里了解更多。您甚至可以使用MAAttachedWindow。
关于动画,就像要求窗口的动画师为帧和 alpha 值设置动画一样简单(将它们组合在一起)。您可能希望首先将所有内容直接设置在其“起始位置”(即,当窗口不在屏幕上时,将其 alpha 设置为零,并将其框架设置为一些较小的版本,以便它“放大”la iCal ),然后将其放在屏幕上并开始分组动画:
[NSAnimationContext beginGrouping];
[[window animator] setFrame:someNewSlightlyLargerFrame];
[[window animator] setAlphaValue:1.0];
[NSAnimationContext endGrouping];
分组结束后,动画将开始(异步)并且您的代码将继续执行。需要考虑的事情是首先“上演”所有内容(包括确保您的窗口的子视图已经预先更新,因此它们不会在您的动画中间发生变化......除非您想要它们)。
所以你需要了解的两个独立的技术是自定义窗口和基本的 Cocoa 动画。
如果您使用的是 OSX 10.7 及更高版本,NSPopover
将完成您正在寻找的工作。
您是在谈论甚至从 iCal 应用程序底部的列表中进行选择吗?
不确定您到底指的是什么,但有一个用于在时间跨度内动画转换的 api。
查看其他 Apple 的应用程序,Apple 的开发人员使用其他任何人都可以使用的相同 api(我猜主要是这样)。有很多东西可以定制,苹果会定制任何需要的东西,直到从设计的角度来看它看起来是正确的......