如何在需要时更新 NSCursor?我实现了resetCursorRects
方法。在resetCursorRects
我创建具有所需大小的图像(大小取决于我的应用程序中的滑块值)并使用该图像制作光标。因此,如果我的滑块(女巫声明所需的光标大小)正在更改,我需要更新我的光标。因此,如果从逻辑上思考,呼叫[self resetCursorRects]
应该有效,但事实并非如此。更改滑块值并调整窗口大小后,光标会更新。但是为什么当我尝试调用它时它没有更新?
问问题
2268 次
2 回答
3
如果您只想要一个更简单的解决方案,仅使用系统游标,您可以这样做:
在视图头文件中声明:
NSCursor *currentCursor;
实现这个方法:
- (void)resetCursorRects
{
NSSize clientSize = self.frame.size;
NSRect clientArea = {0, 0, clientSize.width, clientSize.height};
[self addCursorRect:clientArea cursor:currentCursor];
}
只需执行此操作即可更改光标:
currentCursor = [NSCursor arrowCursor];
[self discardCursorRects];
[currentCursor set];
或者使用任何其他系统定义的游标。
于 2013-11-11T20:36:19.527 回答
1
为此,您应该实施
@property (nonatomic, retain) NSArray *cursors;
在您的 .h 文件中,例如:
- (void)loadCursors
{
NSCursor *defaultCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DEFAULT_CURSOR] hotSpot:NSMakePoint(2, 0)];
NSAssert(defaultCursor, @"defaultCursor failed to load");
NSCursor *clickedCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:CLICKED_CURSOR] hotSpot:NSMakePoint(2, 0)];
NSAssert(clickedCursor, @"clickedCursor failed to load");
NSCursor *draggingCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DRAGGING_CURSOR] hotSpot:NSMakePoint(17, 2)];
NSAssert(draggingCursor, @"draggingCursor failed to load");
self.cursors = [NSArray arrayWithObjects:defaultCursor, clickedCursor, draggingCursor, nil];
[defaultCursor release];
[clickedCursor release];
[draggingCursor release];
[self resetCursorRects];
}
- (void)setCursor:(NSUInteger)cursorIndex
{
[self discardCursorRects];
[self addCursorRect:self.bounds cursor:[self.cursors objectAtIndex:cursorIndex]];
[(NSCursor *)([self.cursors objectAtIndex:cursorIndex]) set];
}
- (void)resetCursorRects
{
[self setCursor:CursorTypeDefault];
}
并在以下情况下使用这些方法:
- (void)mouseDown:(NSEvent *)theEvent
{
[self setCursor:CursorTypeClicked];
}
或任何你想要的地方。
不要忘记使用游标实现 Enum 并在 init 方法中加载游标!
希望这可以帮助。
于 2012-10-02T18:30:26.167 回答