UISegmentedControl图像缩放

时间:2011-02-04 09:40:38

标签: image ios scaling uisegmentedcontrol

如何缩小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];

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

screen shot

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

2 个答案:

答案 0 :(得分:19)

你永远不应该使用" big"图像只显示一个小图片。完整的图像将被加载到内存中,并且只会显示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;
}

使用您的代码:

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];

答案 1 :(得分:1)

在swift3中,

<section id="mySection"> Hello </section>