Pergunta

Hullo All - Eu tenho uma subclasse NSView que movo programaticamente em Mousedown. Que funciona, mas tem um efeito colateral estranho:

  1. Eu clico na subview. A subview se afasta BOA
  2. Eu espero um pouco. Eu não movo meu mouse. Como a subview se moveu, não está mais sob meu cursor.
  3. Eu clico no meu mouse novamente.
    • Espero que a janela subjacente obtenha o evento Mousedown (já que a subview não está mais sob meu cursor), no entanto, minha subview de alguma forma recebe este evento ÍMPAR
    • O evento de Mousedown mostra claramente que o clique estava fora dos limites da minha subclasse ÍMPAR
    • O evento de Mousedown também mostra claramente que a contagem de cliques aumentou, apesar de ter esperado vários segundos entre os cliques do mouse ÍMPAR

... Tem que haver uma explicação para o que estou vendo. Aqui está o meu código - basta criar um novo projeto de aplicativo de cacau chamado "Oddmouse" e copie o seguinte no arquivo ímpareppdelegate.h:

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

@interface OddView : NSView {
}
@end

... e o seguinte no arquivo ímparappdelegate.m:

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

[Window ContentView] AddSubView: [[OddView aloc] init]]; } @fim

@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

... então construa, depois corra e depois testemunha! FWIW, aqui está o que vejo no 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
Foi útil?

Solução

Freaking Heck - Acontece que isso foi algo que se comporta mal com a velocidade de clique duplo - mudando os prefs fez SFA, mas uma reinicialização resolvida ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top