NSImageView
キャプチャするイベントmouseEntered
とイベントのサブクラスを作成しましたmouseExited
。しかしmouseUp
、mouseDown
イベントだけが呼び出されています。サブクラスのイベントmouseEntered
とmouseExited
イベントをキャプチャする方法は?NSImageView
質問する
12116 次
4 に答える
84
を使用したい場合、を使用する必要がありmouseEntered:
ます。これがリファレンスNSTrackingAreaクラスリファレンスです。mouseExited:
NSTrackingArea
例:
//Add this to Your imageView subclass
-(void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"Mouse entered");
}
-(void)mouseExited:(NSEvent *)theEvent
{
NSLog(@"Mouse exited");
}
-(void)updateTrackingAreas
{
[super updateTrackingAreas];
if(trackingArea != nil) {
[self removeTrackingArea:trackingArea];
[trackingArea release];
}
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds]
options:opts
owner:self
userInfo:nil];
[self addTrackingArea:trackingArea];
}
于 2012-06-25T13:57:59.553 に答える
11
JustinBooの回答のSwift4バージョン
override func updateTrackingAreas() {
super.updateTrackingAreas()
for trackingArea in self.trackingAreas {
self.removeTrackingArea(trackingArea)
}
let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeAlways]
let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
self.addTrackingArea(trackingArea)
}
于 2018-06-03T01:25:03.277 に答える
10
@JustinBooの回答のSwift3バージョン:
private var trackingArea: NSTrackingArea?
override func updateTrackingAreas() {
super.updateTrackingAreas()
if let trackingArea = self.trackingArea {
self.removeTrackingArea(trackingArea)
}
let options: NSTrackingAreaOptions = [.mouseEnteredAndExited, .activeAlways]
let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
self.addTrackingArea(trackingArea)
}
于 2017-07-14T11:47:18.630 に答える
4
Justin Booの回答のC#Xamarinバージョン
public override void UpdateTrackingAreas ()
{
base.UpdateTrackingAreas ();
foreach (var item in TrackingAreas ()) {
RemoveTrackingArea (item);
}
var options = NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways;
var trackingArea = new NSTrackingArea (this.Bounds, options, this, null);
AddTrackingArea (trackingArea);
}
于 2018-07-12T16:01:15.587 に答える