gpt4 book ai didi

objective-c - Cocoa NSOpenGLView - [win setDelegate :view ] shows error. 如何手动委托(delegate)?

转载 作者:行者123 更新时间:2023-12-03 16:45:45 24 4
gpt4 key购买 nike

我正在 Yosemita 10.10 上的 Eclipse(不是 Xcode)中编程...我 try catch MouseMoved 事件,但它没有被调用(mouseDown、mouseDragged - 工作正常)。所以我使用这里的示例代码 http://lists.apple.com/archives/mac-opengl/2003/Feb/msg00069.html但编译器显示错误
[应用程序setDelegate: View ];(- 无法使用“NSView *”类型的左值初始化“id”类型的参数)
如果我评论这一行 - 它可以工作,但 mouseMoved 不会调用。
请帮忙!我是 Objective-c 的新手

最佳答案

OS X 不会自动为您跟踪鼠标移动事件,除非您请求。

为了接收 mouseMoved: 事件,您应该将 NSTrackingArea 添加到 NSOpenGLView 的子类中。例如:

- (void)awakeFromNib {
NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:self.frame options:NSTrackingActiveAlways|NSTrackingMouseMoved owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
}

之后,您的 mouseMoved: 方法将被调用。

- (void)mouseMoved:(NSEvent *)theEvent {
NSLog(@"moved");
}

如果您需要在 View 大小调整时手动更新跟踪区域,则可以选择实现 updateTrackingAreas。详情请引用Using Tracking-Area Objects .

关于objective-c - Cocoa NSOpenGLView - [win setDelegate :view ] shows error. 如何手动委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com