在OSX中,用户可以使用辅助功能系统首选项缩放鼠标光标.由于Lion(我认为)OSX将游标存储为PDF并且能够平滑地调整它们的大小.我希望我的应用程序具有相同的功能,但使用PDF作为NSImage
我的用途NSCursor
只是在设置了大于1.0的光标缩放级别时缩放渲染的位图.
我如何能:
此外,当我的屏幕使用HiDPI模式并恢复光标缩放设置时,PDF光标也会模糊,那么你们究竟如何视网膜 - 你的光标呢?
我有一个在后台运行的实用程序Mac应用程序(LSUIElement
启用).在某些情况下,此应用程序显示带有几个按钮的菜单窗口.问题是,当我将鼠标悬停在此窗口上时,鼠标光标仍然会根据其下方的应用程序运行 - 当菜单下有文本时,光标会变为插入"I beam"形状.
显然我更喜欢常规指针箭头.我NSTrackingArea
经过一些黑客攻击后潜入了朋友,我可以检测到鼠标输入和鼠标退出事件.但是当我尝试使用NSCursor
鼠标输入更改当前光标时,没有任何反应.看起来机器拒绝从非活动应用程序更改游标,因为当我在鼠标输入事件之前激活应用程序时,光标会改变.
我不想仅仅为了更改光标而切换活动应用程序.有没有办法摆脱非活动应用程序的光标?
为什么我不能在鼠标拖动期间让光标停留?一旦我开始拖动,它就会恢复为"箭头"(即使我在启动后将其设置为app delegate中的开放手).
- (void)mouseDown:(NSEvent *)event
{
[[NSCursor closedHandCursor] push];
}
- (void)mouseUp:(NSEvent *)event
{
[NSCursor pop];
}
Run Code Online (Sandbox Code Playgroud) 如果我们使用NSTrackingArea
某些指定区域,那么我们可以实现这样的方法来更改默认光标:
-(void)cursorUpdate:(NSEvent *)theEvent {
[[NSCursor resizeLeftCursor] set];
}
Run Code Online (Sandbox Code Playgroud)
我实现自定义调整大小NSWindow
,使用NSBorderlessWindowMask
.并希望使用本机Lion的两个箭头游标.但是NSCursor API中不存在这种类型的游标.
我能从代码中以某种方式获得这样的原生游标吗?
或者也许我必须手工重绘(不是一个好主意)?
我试图在我的cocoa应用程序中更改默认光标.我读到了这个,但标准方法对我不起作用.
我尝试将此方法添加到我的OpenGLView子类中:
- (void) resetCursorRects
{
[super resetCursorRects];
NSCursor * myCur = [[NSCursor alloc] initWithImage:[NSImage imageNamed:@"1.png"] hotSpot:NSMakePoint(8,0)];
[self addCursorRect: [self bounds]
cursor: myCur];
NSLog(@"Reset cursor rect!");
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.为什么?
我有一个带有自定义光标的应用程序,我使用 NSCursor 的自定义包装器实现了该应用程序(大部分主要代码设计为可移植操作系统,因此在上面我假装 NSCursor 是 Windows 样式的光标)。当用户 cmd+tabs 回到窗口时,我遇到了一些光标没有改回我的自定义问题的问题,我想看看是什么改变了 currentCursor 的值。到目前为止,我尝试设置断点的任何地方都没有给我任何信息。
所以,我想知道是否有办法(在 Xcode 中)在 [NSCursor currentCursor] 的值发生变化时立即中断。这可能吗?我的应用程序可以访问此类数据吗?
谢谢 - 我希望我已经说清楚了。当我什至不确定我想做什么时,很难解释!
我正在使用osx捕获屏幕
capturedImage = CGDisplayCreateImageForRect(displayID, CGRectMake(point.x - 4, point.y - 4, 8, 8));
Run Code Online (Sandbox Code Playgroud)
这将返回光标下的屏幕部分.后来我正在设置一个自定义图像光标:
[[[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(4, 4)] set];
Run Code Online (Sandbox Code Playgroud)
设置光标并尝试再次捕获屏幕后,会出现此问题.光标包含在帧缓冲区中.这使得捕获的图像与我作为光标放置的图像相同.我试图隐藏光标,然后捕获屏幕,然后显示回来,但它不起作用,它也使光标闪烁.
更奇怪的是,在特定的笔记本电脑上没有捕获光标图像,而是在运行相同操作系统(Mountain Lion,Snow Leopard)的其他笔记本电脑上捕获光标图像.
什么可以导致光标包含在帧缓冲区中?有没有办法保证没有自定义光标的屏幕截图?
谢谢
我有一个包含状态的弹出状态栏应用程序NSTableView
。当将一行拖到表外时(拖放在这里完全起作用,这不是问题的重点),我将光标更改为the指针,否则称为[NSCursor disappearingItemCursor]
:
- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint {
if (self.draggedRowCanBeDeleted) {
BOOL outside = !NSPointInRect(screenPoint, window.frame);
if (outside) {
[[NSCursor disappearingItemCursor] set];
} else {
[[NSCursor arrowCursor] set];
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是非常不可靠的,因为有时它有时不起作用。它通常在第一次尝试时起作用,但是在此之后退出工作。我似乎找不到我要拖动的东西或拖动行进多远等的模式,只是看起来很不稳定。我在这里做错什么了吗?如果没有,我可以做些什么来帮助诊断问题吗?
更新
我也尝试了push
/ pop
路由,问题仍然存在。
- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint {
if (self.draggedRowCanBeDeleted) {
BOOL outside = !NSPointInRect(screenPoint, window.frame);
if (outside) {
if (!_showingPoof) {
_showingPoof = YES;
[[NSCursor disappearingItemCursor] push];
}
} else {
if (_showingPoof) {
_showingPoof = NO;
[[NSCursor disappearingItemCursor] pop];
// …
Run Code Online (Sandbox Code Playgroud) 是否使用预览(例如调整形状大小时)系统光标时调整大小的鼠标光标?
它不能直接作为方法使用,NSCursor
但它看起来不像预览应用程序包中的光标有私有资源.
除了NSCursor
类定义的方法之外还有更多的系统游标吗?
我正在开发具有多个窗口和视图(NSTextView
等)的应用程序。
我想在我的应用程序中全局更改游标,以便即使游标输入trackingRect
of(例如)的,NSTextView
它也不会更改。
这可能吗?
PS:我还需要恢复到通常的行为。
nscursor ×10
cocoa ×8
objective-c ×7
macos ×6
cursor ×2
appkit ×1
mouse-cursor ×1
nstableview ×1
nstextview ×1
osx-lion ×1
screenshot ×1
xcode ×1