2015-08-04 5 views
1

Я создаю пользовательский вид, которому нужен специальный курсор (вместо обычной стрелки). Я использую resetCursorRects для установки нового курсора и его области, но новый курсор появляется только кратковременно, когда мышь входит в область прямоугольника, возвращаясь к стрелке.resetCursorRects не работает (новый курсор только мигает при входе мыши)

Чтобы проверить ситуацию лучше, я создал новый проект, создаю новый пользовательский вид (на основе NSView), добавьте его в окно, но проблема остается. Обычай код вид:

#import "TestView.h" 

@implementation TestView 

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    [[NSColor redColor]set]; 
    [NSBezierPath fillRect:self.bounds]; 
} 

-(void)resetCursorRects 
{ 
    [self addCursorRect:NSMakeRect(2, 2, 40, 40) cursor:[NSCursor openHandCursor]]; 
} 

@end 

Я пытался что-то вроде [супер resetCursorRects] или [само] discardCursorRects перед addCursorRect, но бездельники происходит. Я что-то делаю неправильно?

ответ

0

Ваш код верен и, кажется, работает очень хорошо во всех случаях.

Есть несколько дополнительных способов установки изображения курсора. Может быть, они помогут вам, 2 примера ниже.

1) Вы можете установить зону отслеживания в своем пользовательском представлении и использовать метод NUResponder cursorUpdate: method в этом представлении. Нечто подобное:

// call when initializing view 
- (void)updateTrackingAreas { 
    [[NSTrackingArea alloc] initWithRect:self.visibleRect options: (NSTrackingCursorUpdate | NSTrackingEnabledDuringMouseDrag | NSTrackingActiveInActiveApp) owner:self userInfo:nil]; 
} 

// NSResponder override in view 
- (void)cursorUpdate:(NSEvent *)event { 
    [[NSCursor openHandCursor] set]; 
} 

2) Если вы используете свой собственный вид в ScrollView вы можете использовать setDocumentCursor: метод ScrollView:

[self.scrollView setDocumentCursor:[NSCursor openHandCursor]]; 
0

решаемые с перезагрузкой ... После многих часов работы , Я обнаружил, что это какая-то ошибка в системе, которая была решена простой перезагрузкой.

Благодарю всех вас за ваше время ...

 Смежные вопросы

  • Нет связанных вопросов^_^