【问题标题】:Native OSX Lion resize cursor for custom NSWindow or NSView本机 OSX Lion 为自定义 NSWindow 或 NSView 调整光标大小
【发布时间】:2012-05-24 07:43:50
【问题描述】:

如果我们对某个指定区域使用NSTrackingArea,那么我们可以实现这样的方法来更改默认光标:

-(void)cursorUpdate:(NSEvent *)theEvent {
    [[NSCursor resizeLeftCursor] set];
}

我为NSWindow 实现自定义调整大小,它使用NSBorderlessWindowMask。并且想使用原生 Lion 的两个箭头游标。但是NSCursor API 中不存在这种类型的游标。

我可以从代码中以某种方式获得这样的本机游标吗?
或者也许我必须手动重新绘制它们(不是一个好主意)?

【问题讨论】:

  • 这里有同样的问题。你找到那些光标图像了吗?

标签: objective-c macos cocoa osx-lion nscursor


【解决方案1】:

不幸的是,WebKit 中的那些在视网膜分辨率下不可用,查看

/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors

您会找到调整光标大小的 pdf 版本。

【讨论】:

  • 您能否提供代码如何正确加载此类光标?对我来说,它们没有显示在视网膜中:(
  • 是否有公共 API 来获取/使用这些游标..?
【解决方案2】:

以下是一些示例代码,用于从 HIServices.framework 加载基于矢量(因此支持视网膜)的游标:

NSString *cursorName = @"resizenortheastsouthwest";
NSString *cursorPath = [@"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors" stringByAppendingPathComponent:cursorName];
NSImage *image = [[NSImage alloc] initByReferencingFile:[cursorPath stringByAppendingPathComponent:@"cursor.pdf"]];
NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:[cursorPath stringByAppendingPathComponent:@"info.plist"]];
NSCursor *cursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint([[info valueForKey:@"hotx"] doubleValue], [[info valueForKey:@"hoty"] doubleValue])];

请注意,我不知道这是否适用于沙盒应用程序。

【讨论】:

    【解决方案3】:

    有创建此类游标的未记录方法。 这是一个例子:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wundeclared-selector"
        if ([NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)])
        {
            self.resizeUpDownCursor = [NSCursor performSelector:@selector(_windowResizeNorthSouthCursor)];
        }
        else
        {
            self.resizeUpDownCursor = [NSCursor resizeUpDownCursor];
        }
    #pragma clang diagnostic pop
    

    这是 macOS Sierra 中未记录光标的完整列表:

    [NSCursor _windowResizeEastCursor]
    [NSCursor _windowResizeWestCursor]
    [NSCursor _windowResizeEastWestCursor]
    [NSCursor _windowResizeNorthCursor]
    [NSCursor _windowResizeSouthCursor]
    [NSCursor _windowResizeNorthSouthCursor]
    [NSCursor _windowResizeNorthEastCursor]
    [NSCursor _windowResizeNorthWestCursor]
    [NSCursor _windowResizeSouthEastCursor]
    [NSCursor _windowResizeSouthWestCursor]
    [NSCursor _windowResizeNorthEastSouthWestCursor]
    [NSCursor _windowResizeNorthWestSouthEastCursor]
    [NSCursor _zoomInCursor]
    [NSCursor _zoomOutCursor]
    [NSCursor _helpCursor]
    [NSCursor _copyDragCursor]
    [NSCursor _genericDragCursor]
    [NSCursor _handCursor]
    [NSCursor _closedHandCursor]
    [NSCursor _moveCursor]
    [NSCursor _waitCursor]
    [NSCursor _crosshairCursor]
    [NSCursor _horizontalResizeCursor]
    [NSCursor _verticalResizeCursor]
    [NSCursor _bottomLeftResizeCursor]
    [NSCursor _topLeftResizeCursor]
    [NSCursor _bottomRightResizeCursor]
    [NSCursor _topRightResizeCursor]
    [NSCursor _resizeLeftCursor]
    [NSCursor _resizeRightCursor]
    [NSCursor _resizeLeftRightCursor]
    

    【讨论】:

      【解决方案4】:

      WebKit 包含与系统使用的光标完全相同的图像,位于以下目录中:

      /System/Library/Frameworks/WebKit.framework/Versions/Current/Frameworks/WebCore.framework/Resources/
      

      ...例如,文件“northWestSouthEastResizeCursor.png”。

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        相关资源
        最近更新 更多