对于个人项目,我目前正在尝试在 Automator for OS X 中复制工具栏的视觉样式。我已经尝试了几乎所有方法来让 NSToolbar 中的 NSButtons 在视觉上看起来相似,但似乎无法想象找出精致的 UI 组件来解决这个问题,所以我转向 Stack Overflow 上的聪明才智。
我正在尝试做的事情:我正在尝试复制 Automator 工具栏按钮的视觉样式:
设置:目前我有活动按钮状态、非活动按钮状态和按下按钮状态的 tiff 图像。我想使用这些图像作为 NSButtonCell 的背景。现在,我将 NSButtonCell 子类化(代码如下),并在 Interface Builder 的 XIB 文件中将 NSButtonCell 类设置为 TFToolbarButtonCell。在 NSButtonCell 的子类中,我重写了 -drawWithFrame:inView 以在框架中绘制适当的状态图像;我还覆盖 -highlight:withFrame:inView 以在单击按钮时绘制按下的图像。
非常感谢我在这里可能做错的任何方向!
TFToolbarButtonCell.h
#import <Cocoa/Cocoa.h>
@interface TFToolbarButtonCell : NSButtonCell
@property (nonatomic, strong) NSImage *onImage;
@property (nonatomic, strong) NSImage *offImage;
@property (nonatomic, strong) NSImage *highlightImage;
@end
TFToolbarButtonCell.m
#import "TFToolbarButtonCell.h"
@implementation TFToolbarButtonCell
- (id)init
{
self = [super init];
if(self) {
//initialize here
}
return self;
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if([self state]){
[self.onImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
} else {
[self.offImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if(flag){
[self.highlightImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
@end