その内容を介してドラッグできるドラッグ可能な NSWindow を作成しました。タイトル バーがありません (フチなし)。
ドラッグは正常に機能しますが、ちらつきが頻繁に発生します。ウィンドウがすぐに間違った位置に移動してから、マウスがある場所に戻っているようです (マウスを押したままにします)。また、imac よりも macbook の方がうまく機能するようです。
誰かが私が間違っていることを理解できますか?
init で、次の 2 つのメソッドを呼び出しました。
[self setMovableByWindowBackground:YES];
[self setMovable:YES];
使用される変数は次のとおりです。
NSPoint currentLocation;
NSPoint newOrigin;
int offsetX,offsetY;
そして、ドラッグに関するコードは次のとおりです。
- (void)mouseMoved:(NSEvent *)theEvent{
}
- (void)mouseDown:(NSEvent *)theEvent{
currentLocation = [self convertBaseToScreen:[self mouseLocationOutsideOfEventStream]];
offsetX = currentLocation.x - [self frame].origin.x;
offsetY = currentLocation.y - [self frame].origin.y;
}
- (void)mouseDragged:(NSEvent *)theEvent{
currentLocation = [self convertBaseToScreen:[self mouseLocationOutsideOfEventStream]];
newOrigin.x = currentLocation.x - offsetX;
newOrigin.y = currentLocation.y - offsetY;
[self setFrameOrigin:newOrigin];
}
編集: OK、前述のように、これは透明なボーダレス NSPanel です。はい、上記のコードは必要ないようです。
しかし、ウィンドウがドラッグされている場所が必要であり、継続的に必要です。
フレームの原点を次のように取得した場合:
self.frame.origin
これは、間違った番号を報告します。cocoa がこの内部値を更新するまでには、しばらく時間がかかるようです。
第二に、パネルはアクティブ化されていません。最初にロードされた (フォーカスされた) ときに mouseDragged が呼び出されたときに移動すると、正常に動作します。しかし、別のアプリとやり取りしてから戻ったときはそうではありません。mouseDown と mouseUp のみが呼び出されます。