【发布时间】:2023-03-24 04:40:01
【问题描述】:
我正在 Mac 上开发一个小型应用程序,我需要创建自定义光标并移动它。我使用 NSImageView 来实现它。但是,当我调用 setFrameOrigin(与 setFrame 相同)时,它会将图像留在前一个位置。 这是我的代码:
@property (nonatomic, strong) NSImageView *eraserView;
这是定义
_eraserView = [[NSImageView alloc] initWithFrame:CGRectMake(100, 100, 32, 32)];
_eraserView.image = [NSImage imageNamed:@"EraserCursor"];
[self.view addSubview:_eraserView];
[_eraserView setHidden:YES];
这里是初始化。到目前为止一切顺利,但是:
- (void)setImageatPoint:(NSPoint)point
{
[_eraserView setFrameOrigin:point];
}
- (void)hidePenImage
{
[_eraserView setHidden:YES];
}
- (void)unhidePenImage: (BOOL)isEraser
{
[_eraserView setHidden:NO];
}
这些是我用来改变 NSImageView 状态的方法。当触控板的相应事件发生时,它们将由另一个类使用委托调用。 但是,每次我更改 NSImageView 的状态时,它似乎都是在超级视图上绘制的。 我调试了它,发现没有额外的子视图。当我使用 setHidden 时,它对这些轨道没有影响。我认为它以某种方式对 CALayer 产生了影响,但我不知道如何修复它。
【问题讨论】:
标签: objective-c macos nsview