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

5

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

现在IB只有一个工具栏项目的单个图像字段。是否有一种方法可以自动更改图标大小,还是我必须子类化NSToolbar并手动响应大小更改并为每个项目修复图标?

2个回答

3

根据苹果工具栏指南:

你应该提供一个支持多个图像表示方式(如icns或tiff)的单个图像,其中包含默认、常规和小尺寸模式特定的图像表示。适当的图像表示会自动显示为工具栏的当前sizeMode。如果没有合适的表示,工具栏会将表示按比例缩放到当前模式的适当大小,但这样做可能会影响性能和外观。


2

错误的解决问题方式。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设置新图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接