【发布时间】:2014-08-30 20:41:01
【问题描述】:
这里的目标是在用户看到的 NSImageView 的“顶部”有一个选择层。然而,我的选择层总是以某种方式在“后面”结束。这是我的 NSImageView 子类中覆盖的 -setImage:
-(void)setImage:(NSImage *)newImage {
if(newImage) {
// compute image location in view
_imageLocation.x = ( [self frame].size.width - [newImage size].width ) / 2.0;
_imageLocation.y = ( [self frame].size.height - [newImage size].height ) / 2.0;
// call to parent
[super setImage:newImage];
if(_pixelDataManager) {
_pixelDataManager = nil;
}
_pixelDataManager = [[PixelDataManager alloc] initWithImageForData:newImage];
_selectionLayer = [CALayer layer];
[_selectionLayer setBorderColor:[[NSColor yellowColor] CGColor]];
[_selectionLayer setBorderWidth:2.0];
[_selectionLayer setCornerRadius:0.0];
[[self layer] addSublayer:_selectionLayer];
}
else {
[super setImage:nil];
_pixelDataManager = nil;
_imageLocation.x = 0.0;
_imageLocation.y = 0.0;
}
}
这里的焦点是黄色框。我在另一个项目中为自定义 NSView 提供了类似的代码,看起来不错,但不明白为什么这不适用于 NSImageView。
【问题讨论】:
-
您可以尝试更改图层的 z 顺序。 stackoverflow.com/questions/25371109/…
-
@mohacs,谢谢你先生/女士,这成功了!!!
标签: macos cocoa core-animation calayer nsview