Я работаю над приложением Mac с Xcode (использующим cocos2d), пытаюсь настроить курсор, и метод "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 и вызываю его где-то еще в моем коде, то оно ничего не делает (хотя я проверил, что оно вызывается) ...