目标c——制作一个码头酒吧



我想制作一个包含应用程序图标的停靠栏。如果我点击任何图标,那么该应用程序应该午餐,我该如何隐藏dock栏?

我刚接触可可,对此一无所知。所以谁能给我做这件事的基本想法吗。

提前感谢

这里有几个关键元素:

  • 就像屏幕上的其他任何东西一样,Dock必须在窗口中。大概,您并没有想象一个具有标准框架(标题栏、红绿灯和调整大小手柄)的窗口,所以您想要一个无边框的窗口。它必须在一个特定的窗口级别,即这个窗口级别
  • 每个图标都是一个按钮。您可以将其发展为能够弹跳、显示运行状态(就像Dock对其LED所做的那样)等的自定义视图
  • Dock由三种项目组成:正在运行的应用程序、已加书签的应用程序(即使在运行时也会留在Dock中)和已加书签文件(文档、文件夹等)。应用程序位于分隔符的左侧;书签文件和垃圾箱在右侧
  • 说到垃圾箱,如果你想要的话,你需要使用FSEvents来检测任何垃圾箱何时变为非空,NSWorkspace或Apple Event到Finder来打开垃圾箱,Apple Event到Finder来清空垃圾箱
  • 当用户单击未运行的带书签的应用程序时,您将使用NSWorkspace启动该应用程序
  • 对于已经运行的应用程序,您需要激活它们(如果尚未激活)或"重新打开"它们(如果已激活)。我首先会尝试推出它们,看看在这三种情况下是否都是正确的;如果没有,那么您可以在必要时自己发送Apple Events
  • 书签文件夹可以在Dock中使用三个UI之一仔细阅读:列表(菜单)、网格(收藏视图)和"粉丝"。菜单制作起来很简单,但我不知道如何制作一个popover风格的菜单。网格UI将是HUD风格的popover中的集合视图。"风扇"完全是一种习俗,在流行音乐中
  • 您需要检测应用程序何时启动和终止,以便将它们添加到Dock(如果还没有作为书签)并从中删除(如果当时还没有添加书签)。NSWorkspace对此有通知
  • 您可能无法获得应用程序的自定义Dock菜单。这都是苹果Dock和AppKit之间的私人事务
  • 同样,祝您在执行"分配到桌面"菜单项时好运
  • 每个应用程序的Dock菜单中的其他命令对应于NSRunningApplication方法
  • 您还需要处理Dock图标视图中的拖放操作,既可以启用重新排序,也可以处理用户将项目从Dock中拖出来取消书签的操作。记住要处理取消对正在运行的应用程序的书签的情况(Dock确实取消了对其的书签,但由于应用程序仍在运行,因此会将其卡回原位)。取消书签时,当用户放下书签时,会播放poof效果
  • 当用户从Dock中拖动任何项目时,拖动该项目表示的文件。这在Finder(在苹果的Dock中——如果你愿意,你可以这样做)或Trash(它不代表单个项目)上不起作用。不要从Dock中移除项目
  • 另一方面,当用户拖动到某个图标时,您应该高亮显示该图标,如果且仅当该图标所代表的项目可以接收到该拖动时。
    • 当用户将文件拖动到应用程序时,如果所有文件的类型都在应用程序的文档类型中,请将其高亮显示。通过使用NSWorkspace打开该应用程序的文件URL来完成拖动
    • 当用户将非文件URL拖动到应用程序时,如果所有URL的方案都在应用程序的URL方案中,请将其高亮显示。通过使用NSWorkspace打开该应用程序的URL来完成拖动
    • 当用户将内容拖动到应用程序时,如果应用程序具有可以处理拖动粘贴板上任何内容类型的服务,请将其高亮显示。通过调用该服务来完成它。(我不知道有什么公共的API可以在特定的应用程序中实现这一点——你只需要使用服务名称,并希望一切顺利。)
    • 当用户将文件拖动到某个文件夹时,如果该文件夹是可写的或包含任何文件夹,请将其高亮显示。如果用户在那里停留一定时间,请在Finder中打开文件夹(此功能称为弹簧加载文件夹)。如果用户将文件放在Dock中的文件夹上,请根据修改器键的状态,通过将文件移动或复制到文件夹中,或在文件夹中为其创建别名来完成拖动
    • 垃圾箱中的文件也是如此,但您需要为每个文件确定正确的垃圾箱。如果文件在主文件夹中,则正确的垃圾箱是主文件夹的垃圾箱。否则,它是文件所在卷的卷级垃圾箱
    • 当用户将任何卷拖动到垃圾箱时,将其图标更改为"弹出"图标(kEjectMediaIcon,与iconForFileType:一起使用)。通过弹出卷来完成拖动。如果用户完成拖动、取消拖动或从垃圾箱拖动,请将垃圾箱的图标改回
  • 哦,您需要处理在项目之间拖动,包括在分隔符之前和之后,以添加项目。这将和我上面提到的拖动以重新排序重叠
  • 对于自动隐藏,您需要在带有Dock的屏幕边缘(通常是第一个屏幕,如果有的话)有一个1英尺宽的无边框窗口,其宽度/高度与真正的Dock相同。当用户将鼠标悬停在此窗口上时,显示Dock(它应该覆盖薄窗口)。当用户将鼠标移动到Dock之外时,将其隐藏
  • Dock有一个上下文菜单,其分隔符上包含各种选项
  • 理想情况下,您应该预计在某个时候会支持主题化,因为Dock至少已经有两个主题(默认的"玻璃"主题和2D HUD风格的主题)

如果我错过了什么,请告诉我。

最新更新