Native OSX Lion调整自定义NSWindow或NSView的游标大小

Vad*_*dim 8 macos cocoa objective-c nscursor osx-lion

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

-(void)cursorUpdate:(NSEvent *)theEvent {
    [[NSCursor resizeLeftCursor] set];
}
Run Code Online (Sandbox Code Playgroud)

我实现自定义调整大小NSWindow,使用NSBorderlessWindowMask.并希望使用本机Lion的两个箭头游标.但是NSCursor API中不存在这种类型的游标.

我能从代码中以某种方式获得这样的原生游标吗?
或者也许我必须手工重绘(不是一个好主意)?

小智 15

WebKit中存在的那些在视网膜分辨率中不可用,不幸地看着

/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors
Run Code Online (Sandbox Code Playgroud)

你会发现重新调整游标的pdf版本.


Ant*_*erg 6

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

#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
Run Code Online (Sandbox Code Playgroud)

以下是 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]
Run Code Online (Sandbox Code Playgroud)


Nic*_*ell 5

以下是一些用于从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])];
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*ant 1

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

/System/Library/Frameworks/WebKit.framework/Versions/Current/Frameworks/WebCore.framework/Resources/
Run Code Online (Sandbox Code Playgroud)

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