我有一个无边界的NSButton,它包含一个图像,并使用我的ButtonEffect类进行子类化,以检测mouseEntered和mouseExited事件。我的目标是在鼠标进入按钮区域时让图像的边缘发光。我知道我可以通过使用两个不同的图像(一个带阴影而另一个没有)来实现这一点,但我需要用一个图像来做到这一点。
以下是我希望为mouseEntered事件实现的示例:
以下是光标离开按钮区域后应该看到的内容:
这是我尝试设置单元格的背景,但它会改变整个按钮区域的颜色。
#import "ButtonEffect.h"
@interface ButtonEffect ()
@property NSTrackingArea *trackingArea;
@end
@implementation ButtonEffect
- (void)updateTrackingAreas {
[super updateTrackingAreas];
if (_trackingArea) {
[self removeTrackingArea:_trackingArea];
}
NSTrackingAreaOptions options = NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow;
_trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:options owner:self userInfo:nil];
[self addTrackingArea:_trackingArea];
}
- (void)mouseEntered:(NSEvent *)event {
[[NSCursor pointingHandCursor] set];
[self.cell setBackgroundColor:NSColor.redColor];
NSLog(@"mouse entered button");
}
- (void)mouseExited:(NSEvent *)event {
[[NSCursor arrowCursor] set];
[self.cell setBackgroundColor:nil];
NSLog(@"mouse exited button");
}
@end
答案 0 :(得分:1)
你想要这样的东西吗?
- (void)mouseEntered:(NSEvent *)event {
CALayer *lay=[btn layer];
CGColorRef myColor=CGColorCreateGenericRGB(1, 1, 1, 1);
CGColorRelease(myColor);
myColor=CGColorCreateGenericRGB(0, 0, 0.8, 1);
[lay setBorderColor:myColor];
[lay setBorderWidth:1];
[btn setWantsLayer:YES];
[btn setLayer:lay];
CGColorRelease(myColor);
}
- (void)mouseExited:(NSEvent *)event {
CALayer *lay=[btn layer];
CGColorRef myColor=CGColorCreateGenericRGB(1, 1, 1, 1);
CGColorRelease(myColor);
myColor=CGColorCreateGenericRGB(0, 0, 0.8, 1);
[lay setBorderColor:myColor];
[lay setBorderWidth:0];
[btn setWantsLayer:YES];
[btn setLayer:lay];
CGColorRelease(myColor);
}