我正在使用Xcode(使用cocos2d)处理Mac应用程序,尝试配置光标,并且“set”方法在某些情况下似乎没有任何影响......
我已经很难将光标设置为启动应用程序(NSTimer在应用程序真正启动后设置它),现在我只想让它在用户点击时显示另一个图像;我使用NSNotification,我的光标类接收通知,然后它应该设置新图像,然后......没有。
以下是一些可能有用的代码:
-(void) click
{
CCLOG(@"Click");
NSString *path = [[NSBundle mainBundle] pathForResource:@"point_pressed" ofType:@"png"];
NSImage *cursorImage = [[[NSImage alloc] initByReferencingFile:path] autorelease];
NSCursor *cursor = [[NSCursor alloc] initWithImage:cursorImage hotSpot:[[NSCursor currentCursor] hotSpot]];
[cursor set];
}
在初始化中:
[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(updateCursor:) userInfo:nil repeats:NO];
方法:
-(void) updateCursor:(id)sender
{
CCLOG(@"Update cursor");
[[self.cursorsDict objectForKey:@"point"] set];
}
当应用程序变为活动状态时,也会调用“updateCursor”方法,然后它正常工作,显示正确的光标。
我尝试了很多东西,pop和push方法,“setOnMouseEnter”(虽然我还没有使用rect),但没有结果......
有人对此有所了解吗?
编辑:
陌生人,我写了appWake方法:
-(void) appWake
{
int i = rand()%3;
if(i==0)
[[self.cursorsDict objectForKey:@"point"] set];
else if(i==1)
[[self.cursorsDict objectForKey:@"point_pressed"] set];
else if(i==2)
[[self.cursorsDict objectForKey:@"open"] set];
self.state = ECursorState_Point;
[NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(appWake) userInfo:nil repeats:NO];
}
通知称为
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWake) name:EVENT_APPLICATION_DID_BECOME_ACTIVE object:nil];
在appDelegate中设置:
-(void) applicationDidBecomeActive:(NSNotification *)notification
{
[[NSNotificationCenter defaultCenter] postNotificationName:EVENT_APPLICATION_DID_BECOME_ACTIVE object:nil];
}
当这个通知调用它时,它工作正常,光标随机变化;但是如果我在applicationDidBecomeActive中删除通知并在我的代码中的其他地方调用它,那么它什么都不做(虽然我检查过它被调用了)...
答案 0 :(得分:2)
让我从系统事件更改光标的工作解决方案是将光标集包装在async中,如下所示:
DispatchQueue.main.async {
self.customCursor.set()
}
(斯威夫特3)
答案 1 :(得分:1)
我知道它已经有一段时间了。但我遇到了类似的问题。
出于某种原因,从应用程序事件调用时,[cursor set]不起作用。
我是这样做的:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self performSelector:@selector(doChangeCursor) withObject:nil afterDelay:1];
}
- (void) doChangeCursor
{
NSString *file = [[NSBundle mainBundle] pathForResource:@"statusBarImage" ofType:@"tiff"];
NSImage *image = [[NSImage alloc] initWithContentsOfFile:file];
NSCursor *cursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint(0, 0)];
[cursor set];
}
我希望能够帮助别人。
答案 2 :(得分:0)
好吧,我找不到解决这个问题的方法。我不得不使用一种解决方法:处理在光标位置设置的精灵光标......