Frage

Hullo alle - ich habe eine NSView -Unterklasse, die ich programmgesteuert auf Mousedown bewege. Was funktioniert, hat aber einen seltsamen Nebeneffekt:

  1. Ich klicke auf die Unteransicht. Die Unteransicht bewegt sich weg GUT
  2. Ich warte eine Weile. Ich bewege meine Maus nicht. Da sich die Subview bewegt hat, ist sie nicht mehr unter meinem Cursor.
  3. Ich klicke wieder auf meine Maus.
    • Ich gehe davon aus SELTSAM
    • Das Mouedown -Ereignis zeigt deutlich, dass der Klick außerhalb der Grenzen meiner Unterklasse lag SELTSAM
    • Das Mouedown -Ereignis zeigt auch deutlich, dass die Klickzahl inkrementiert ist, obwohl ich mehrere Sekunden zwischen Mausklicks gewartet habe SELTSAM

... Es muss eine Erklärung für das geben, was ich sehe. Hier ist mein Code - erstellen Sie einfach ein neues Cocoa -Anwendungsprojekt namens "Oddmouse" und kopieren Sie Folgendes in die OddMouseAppdelegate.h -Datei:

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

@interface OddView : NSView {
}
@end

... und Folgendes in die OddmouseAppdelegate.m -Datei:

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

[Fenster inhaltsübergreifend] addSubView: [[OddView alloc] init]]; } @Ende

@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

... dann bauen, dann rennen, dann bezeugen! FWIW, hier ist, was ich in der Konsole sehe:

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
War es hilfreich?

Lösung

Freaking Heck - Es stellte sich heraus, dass dies mit der Doppelklick -Geschwindigkeit schlecht benommen wurde - das Ändern der Prefs hat SFA geändert, aber ein Neustart löste sich auf ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top