Domanda

Salve tutti - Ho una sottoclasse NSView che mi muovo a livello di codice su mouseDown. Che funziona, ma ha un effetto lato dispari:

  1. clicco sul visualizzazione secondaria. La visualizzazione secondaria si allontana [buon]
  2. I aspettare un po '. Non mi muovo il mio mouse. Dal momento che la visualizzazione secondaria è mosso non è più sotto il mio cursore.
  3. clicco di nuovo il mio mouse.
    • Mi aspetto che la finestra sottostante per ottenere l'evento mouseDown (dal momento che la visualizzazione secondaria non è più sotto il mio cursore), tuttavia la mia visualizzazione secondaria diventa in qualche modo questo evento [ODD]
    • L'evento mouseDown mostra chiaramente che il clic non rientra nei limiti della mia sottoclasse [ODD]
    • L'evento mouseDown anche mostra chiaramente che il numero di clic si è incrementato, anche se ho aspettato diversi secondi tra il clic del mouse [ODD]

... deve esserci una spiegazione per quello che sto vedendo. Ecco il mio codice - è sufficiente creare un nuovo progetto di cacao applicazione chiamata "OddMouse", e copiare il seguente nel file OddMouseAppDelegate.h:

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

@interface OddView : NSView {
}
@end

... e il successivo nel file OddMouseAppDelegate.m:

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

[[finestra 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

... poi costruire, quindi eseguire, poi testimoniare! FWIW, ecco quello che vedo nella console:

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
È stato utile?

Soluzione

Freaking diamine - si rivela questo era qualcosa di comportamento anomalo con la velocità del doppio clic - la modifica delle preferenze did SFA, ma un riavvio risolto ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top