更改不同工具栏大小的NSToolbar图标

时间:2012-01-17 06:54:05

标签: cocoa

NSToolbar可以使用“使用小尺寸”菜单项由用户控制两种尺寸。常规工具栏大小每个项目需要32x32图标大小,而小尺寸使用24x24。我不希望图标默认缩放,因为每个工具栏大小都有一对图标。相反,当用户更改工具栏大小时,我希望图标自动切换到其他大小。

现在IB每个工具栏项目只有一个图像字段。有没有办法自动更改图标大小或是否必须子类化NSToolbar并手动响应大小更改并修复每个项目的图标?

2 个答案:

答案 0 :(得分:2)

Apple工具栏指南:

  

您应该在支持多个图像表示(如icns或tiff)的单个图像中提供特定于默认,常规和小尺寸模式的图像表示。将自动显示工具栏当前sizeMode的相应图像表示。如果没有适当的表示,工具栏会将表示缩放到当前模式的适当大小,但会降低性能和外观的成本。

答案 1 :(得分:0)

解决问题的错误方法。在更改工具栏大小之前和/或之后,NSToolbar不提供任何与工具栏交互的方法。

也许,您可以解决子类化NSToolbarItem并覆盖该方法的问题:

- (void)setMinSize:(NSSize)size

以下内容对您的问题应该没问题。

- (void)setMinSize:(NSSize)size {
    NSLog(@"setMinSize: %@", NSStringFromSize(size));
    if(size.height < 32.0) { //if we're resizing to min_size than apply a new image based on the actualIdentifier
        if([[self itemIdentifier] isEqual:@"effectsButton"]) {
            [self setImage:[NSImage imageNamed:@"effectsButton24"]];
        }
    } else { //else switch back to the standard image
        if([[self itemIdentifier] isEqual:@"effectsButton"]) {
            [self setImage:[NSImage imageNamed:@"effectButton"]];
        }
    }
    [super setMinSize:size];
}

只需检查新尺寸是否小(<32.0)。如果是这种情况,您可以根据提供的标识符为每个NSToolbarItem设置新图像。