2010-01-16 7 views
1

Hullo all - У меня есть подкласс NSView, который я программно перемещаю по mouseDown. Что работает, но имеет нечетный побочный эффект:NSView Cocoa, получающий безумные события mouseDown?

  1. Я щелкаю подвью. Подвижность отходит [GOOD]
  2. Подождите некоторое время. Я не двигаю мышью. Поскольку перехват переместился, он больше не находится под моим курсором.
  3. Я снова нажимаю на мышь.
    • Я ожидаю, что лежащий в основе окна, чтобы получить событие MouseDown (так как подтаблицы больше не находится под моим курсором), однако мой подтаблицы каким-то образом получает это событие [ODD]
    • Событие MouseDown ясно показывает, что щелчку находился вне границ моего подкласса [ODD]
    • события MouseDown также ясно показывает, что количество кликов увеличившие, хотя я ждал несколько секунд между щелчками мыши [ODD]

... должно быть объяснение того, что я вижу. Вот мой код - просто создать новый проект какао приложение под названием «OddMouse» и скопируйте следующий код в файл OddMouseAppDelegate.h:

#import <Cocoa/Cocoa.h> 
@interface OddMouseAppDelegate : NSObject <NSApplicationDelegate> { 
    NSWindow *window; 
} 
@property (assign) IBOutlet NSWindow *window; 
@end 

@interface OddView : NSView { 
} 
@end 

... и следующее в файл OddMouseAppDelegate.m:

#import "OddMouseAppDelegate.h" 
@implementation OddMouseAppDelegate 
@synthesize window; 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

[[window contentView] addSubview: [[OddView alloc] init]]; } @end

@implementation OddView 
- (id)init { 
    self = [super initWithFrame:NSMakeRect(100, 100, 100, 100)]; 
    return self; 
} 
- (void)drawRect:(NSRect)dirtyRect { 
    NSBezierPath *bz = [NSBezierPath bezierPathWithRoundedRect:[self bounds] 
               xRadius:9 yRadius:9]; 
    [[NSColor blueColor] set]; 
[bz fill]; 
} 
- (void)mouseDown:(NSEvent *)event { 
    NSPoint locationInMyself = [self convertPoint: [event locationInWindow] 
             fromView: nil]; 
    NSLog(@"MOUSE DOWN COORDS: x=%f y=%f, count=%i", 
      locationInMyself.x, locationInMyself.y, [event clickCount]); 
    float newX = [self frame].origin.x+100; 
    float newY = [self frame].origin.y+100; 
    [self setFrame:NSMakeRect(newX, newY, 100, 100)]; 
} 
@end 

... потом строить, а затем запустить, то свидетель! FWIW, вот что я вижу в консоли:

10-01-15 11:38:24 PM OddMouse[4583] MOUSE DOWN COORDS: x=48.000000 y=56.000000, count=1 
10-01-15 11:38:37 PM OddMouse[4583] MOUSE DOWN COORDS: x=-52.000000 y=-44.000000, count=2 
10-01-15 11:38:44 PM OddMouse[4583] MOUSE DOWN COORDS: x=-152.000000 y=-144.000000, count=3 
10-01-15 11:38:52 PM OddMouse[4583] MOUSE DOWN COORDS: x=-252.000000 y=-244.000000, count=4 
10-01-15 11:39:03 PM OddMouse[4583] MOUSE DOWN COORDS: x=-352.000000 y=-344.000000, count=5 

ответ

0

Freaking Хек - оказывается, это было что-то сбойное со скоростью двойного щелчка - изменение префы сделали SFA, но перезагрузка решена ...

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