【问题标题】:Making a Cocoa App Pop Up a Widget instead of a Window使 Cocoa 应用程序弹出一个小部件而不是一个窗口
【发布时间】:2009-11-07 08:59:52
【问题描述】:

我从未使用 XCode 和 Cocoa 制作过应用,但我认为遵循以下说明:

http://developer.apple.com/Mac/library/documentation/GraphicsImaging/Reference/IKImagePicker_Class/IKImagePicker_Reference.html

我可以轻松地制作一个弹出窗口的应用程序,让您按下按钮来调出 IKPictureTaker,但这并不是我想要的。我希望我的应用程序自动调出 PictureTaker。我假设要做到这一点,我必须完全放弃界面构建器并以编程方式完成整个事情,但我不知道什么调用会告诉 Cocoa 应用程序在启动时使用这个类或方法。这将在哪里以编程方式完成?我正在尝试在将在 OSX 中运行的 Cocoa 应用程序中完成所有这些工作。

alt text http://www.freeimagehosting.net/image.php?38f459584c.png][img=http://www.freeimagehosting.net/uploads/th.38f459584c.png

【问题讨论】:

    标签: cocoa macos ikpicturetaker


    【解决方案1】:

    您需要使用 beginPictureTakerWithDelegate:didEndSelector:contextInfo: 方法,该方法将为您提供一个独立的 pictureTaker 窗口。

    IKPictureTaker *sharedPictureTaker = [IKPictureTaker pictureTaker];
    
    [sharedPictureTaker setValue:[NSNumber numberWithBool:YES] forKey:IKPictureTakerShowEffectsKey];
    
    [sharedPictureTaker beginPictureTakerWithDelegate:self didEndSelector:@selector(pictureTakerDidEnd:returnCode:contextInfo:) contextInfo:nil];
    

    如果你把它放在某个地方,比如在你的 Application Delegate 的 applicationDidFinishLaunching: 方法中,你会在启动时获得图片拍摄窗口。

    【讨论】:

    • 非常感谢您的回复。我还是有点困惑。我在哪里访问应用程序委托?如果我在 XCode 中有一个空白的 Cocoa 项目,我似乎无法访问 NSAplication,是否需要创建委托?还是隐藏在某个地方?
    • 从头开始,您可以通过 New Project -> Cocoa Application 来完成。然后看@ApplicationDelegate 类自动创建。否则,您只需通过从应用程序图标拖动到它的命令来链接 IB 中的自定义类。
    【解决方案2】:

    如果您想要更自定义的解决方案,可以查看 QuicktimeKit。它不像上面发布的三个班轮那么容易,但它相对无痛。您将在图片拍摄窗口的外观方面拥有更大的灵活性,能够从任意数量的输入中进行选择,能够添加自己的过滤器等。可能值得一看。

    我对 IKPictureTaker 并不十分熟悉。如果它做了一些我不相信它的事情,请告诉我。

    【讨论】:

      【解决方案3】:

      奇怪的是,在 Xcode /Cocoa 中自动实例化类的方法是通过 Interface Builder (IB)。在 IB 中打开 MainMenu.xib 并确保可以看到 Document 窗口(菜单 Window >> Document)。现在,在库中展开 Cocoa >> Objects & Controllers >> Controllers。您会看到许多控制器,其中有一个蓝色立方体。将此蓝色立方体拖到 MainMenu.xib 文档窗口。您会看到 File's Owner 和 Font Manager 使用与其徽标相同的蓝色立方体。现在,选择您的蓝色立方体并在 Inspector 中选择身份面板(蓝色圆圈上的字母 i)。将 Class 设置为您之前在 Xcode 中创建的类,并保存 MainMenu.xib。 当你运行你的程序时,你的类将被自动实例化。您可以开始调用其他方法或实例化其他对象的起点是

      - (void)awakeFromNib
      {
          NSLog(@"%@ I'm alive!", [self class]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 2018-05-10
        • 2012-12-12
        • 1970-01-01
        相关资源
        最近更新 更多