【问题标题】:Simplest use of NSCursor set commandNSCursor set 命令的最简单使用
【发布时间】:2011-10-20 15:01:12
【问题描述】:

我正在尝试为我的 OSX 应用程序获取自定义光标。在过去的几个小时里,我读到过这样做没有成功。所以我已经转移到最简单的方面,只需将当前光标设置为十字光标,在一个绝对没有别的项目中。

这是最基本的设置,它不会改变我的光标。使用 XCode,我创建了一个新的 Cocoa 项目。我写的唯一一段代码是以下函数中的一行。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        [[NSCursor crosshairCursor] set];
}

这不会改变光标,这可能意味着我遗漏了一些非常基本的东西,但我一生都无法弄清楚。

我尝试了很多变体,使用 NSCursor -push 方法来更改当前光标,但它不起作用。我还尝试放置一个 NSButton,然后按照不同的答案建议 here (其中按钮的类型为 NSButton *):

[button addCursorRect:[button bounds] cursor:[NSCursor crosshairCursor]];

我之前为 iPhone 编写过一些应用程序,但从未为 Mac 编写过,但看起来非常相似。我错过了一些无可救药的愚蠢吗?我也尝试过使用 addCursorRect:cursor: 方法,但我不确定我做对了。不清楚应该调用什么函数,以及从哪里调用它。

一旦我弄清楚如何显示任何不同的光标,然后我想继续为光标制作自己的图像。

谢谢!

【问题讨论】:

    标签: macos sdk operating-system osx-snow-leopard nscursor


    【解决方案1】:

    我不知道为什么,但是在 applicationDidFinishLaunching 中设置光标似乎不起作用。 (我刚试过。)但如果你稍后再做,它会起作用,比如单击按钮的结果,或者如果你希望它在启动时发生,可以使用计时器。

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timer:) userInfo:nil repeats:NO];
    }
    
    -(void)timer:(id)foo
    {
        [[NSCursor pointingHandCursor] set];
    }
    

    【讨论】:

    • 谢谢!这对我有用!这让我想起了我在为 iPhone 开发时遇到的非常相似的问题。对于即使使用 iphone 也遇到问题且某些命令无法正常工作的人(例如让相机开火等),请确保您在稍后的功能中或在如上所述的延迟之后执行此操作。在 applicationDidFinishLaunching 中完成时,我看到命令没有给出预期的结果。这可能/可能没有原因,但目前它确实足以作为一种解决方法。
    • 很高兴听到。也许苹果应该调用回调 applicationAlmostButNotCompletelyFinishedLaunching ;)
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2017-05-06
    • 2014-02-25
    • 2010-10-29
    • 1970-01-01
    • 2021-08-24
    • 2017-05-21
    相关资源
    最近更新 更多