UISegmentedControl图像缩放

e.J*_*mes 8 scaling image uisegmentedcontrol ios

如何缩小图像中使用的图像UISegmentedControl?我正在以编程方式创建分段控件:

UISegmentedControl * segmentButton;
segmentButton = [UISegmentedControl segmentedControlWithItems:
                 [NSArray arrayWithObjects:
                  [UIImage imageNamed:@"option_one.png"],
                  [UIImage imageNamed:@"option_two.png"],
                  nil]];
segmentButton.contentMode = UIViewContentModeScaleToFill;
segmentButton.frame = CGRectMake(10, 10, 200, 32);
[view addSubview:segmentButton];
Run Code Online (Sandbox Code Playgroud)

结果不是我所期望的.原始的.png图像高约100像素,并且它们没有按比例缩小以适合分段控件的32像素高度.这导致分段控制被绘制成与其重叠的巨大图像:

屏幕截图

如何告诉控件缩小这些图像?

Lud*_*dry 19

你永远不应该使用"大"图像来显示一个小图片.完整的图像将被加载到内存中,并且只会显示10%的像素,因此您将无需使用大量内存.

如果您真的想要使用此资源,可以执行的操作是创建包含代码的缩略图,并使用此新生成的缩略图.

以下方法返回您可以在UISegmentedControl中使用的新图像,并且可以释放大图像.

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}
Run Code Online (Sandbox Code Playgroud)

使用您的代码:

UISegmentedControl * segmentButton;
segmentButton = [UISegmentedControl segmentedControlWithItems: [NSArray arrayWithObjects:
                  [self imageWithImage:[UIImage imageNamed:@"option_one.png"] scaledToSize:CGSizeMake(32, 32)],
                  [self imageWithImage:[UIImage imageNamed:@"option_two.png"] scaledToSize:CGSizeMake(32, 32)],
                  nil]];
segmentButton.contentMode = UIViewContentModeScaleToFill;
segmentButton.frame = CGRectMake(10, 10, 200, 32);
[view addSubview:segmentButton];
Run Code Online (Sandbox Code Playgroud)