Dr.*_*eon 3 cocoa transparency objective-c hover nsbuttoncell
我已经实现了一个带有图像的NSButton.
当用户将其悬停时,图像会变为其他内容,然后重新开启.
正常状态:

在悬停时:

我用的代码NSButtonCell是:
界面:
#import <Foundation/Foundation.h>
@interface DKHoverButtonCell : NSButtonCell 
{
    NSImage *_oldImage;
    NSImage *hoverImage;
}
@property (retain) NSImage *hoverImage;
@end
实施:
#import "DKHoverButtonCell.h"
@interface NSButtonCell()
- (void)_updateMouseTracking;
@end
@implementation DKHoverButtonCell
@synthesize hoverImage;
- (void)mouseEntered:(NSEvent *)event {
    if (hoverImage != nil && [hoverImage isValid]) {
        _oldImage = [[(NSButton *)[self controlView] image] retain];
        [(NSButton *)[self controlView] setImage:hoverImage];
    }
}
- (void)mouseExited:(NSEvent *)event {
    if (_oldImage != nil && [_oldImage isValid]) {
        [(NSButton *)[self controlView] setImage:_oldImage];
        [_oldImage release];
        _oldImage = nil;
    }
}
- (void)_updateMouseTracking {
    [super _updateMouseTracking];
    if ([self controlView] != nil && [[self controlView] respondsToSelector:@selector(_setMouseTrackingForCell:)]) {
        [[self controlView] performSelector:@selector(_setMouseTrackingForCell:) withObject:self];
    }
}
- (void)setHoverImage:(NSImage *)newImage {
    [newImage retain];
    [hoverImage release];
    hoverImage = newImage;
    [[self controlView] setNeedsDisplay:YES];
}
- (void)dealloc {
    [_oldImage release];
    [hoverImage release];
    [super dealloc];
}
@end
现在,问题在于:
您需要将按钮的类型更改为瞬时更改.您可以在"属性"检查器中更改它:

或以编程方式更改:
[button setButtonType:NSMomentaryChangeButton];
| 归档时间: | 
 | 
| 查看次数: | 4237 次 | 
| 最近记录: |