制作码头吧

use*_*523 -2 cocoa objective-c

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

我是可可的新手,我不知道.所以任何人都可以给我基本的想法.

提前致谢

Pet*_*sey 7

这里有几个关键要素:

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

如果我错过任何事情,请告诉我.