首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISegmentedControl图像缩放

UISegmentedControl图像缩放
EN

Stack Overflow用户
提问于 2011-02-04 09:40:37
回答 3查看 11.7K关注 0票数 9

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

代码语言:javascript
复制
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像素高度。这将导致绘制一个分段的控件,并将其与巨大的图像重叠:

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-04 13:47:06

你不应该用“大”图像来显示一个小图片。完整的图像将被加载到内存中,只有10%的像素将被显示出来,所以您将使用大量的内存。

如果您真的想使用这个资源,您可以做的是在前面创建一个带有代码的缩略图,并使用这个新生成的缩略图。

下面的方法返回一个可以在UISegmentedControl中使用的新映像,并且可以发布大的映像。

代码语言:javascript
复制
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

使用您的代码:

代码语言:javascript
复制
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];
票数 20
EN

Stack Overflow用户

发布于 2017-08-03 15:23:11

在swift3中,

代码语言:javascript
复制
extension UIImage {
    func scaleImage(scaleToSize: CGSize) -> UIImage {
        UIGraphicsBeginImageContext(scaleToSize)

        self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: scaleToSize))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()
        return newImage!
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-10-11 05:10:13

For iOS 14及更高版本的

UIGraphicsGetImageFromCurrentImageContext使一些图像不那么清晰,所以我改用UIGraphicsImageRenderer,它对我来说很好。

代码语言:javascript
复制
extension UIImage {
    func resizedImage(to targetSize: CGSize) -> UIImage? {
        let render = UIGraphicsImageRenderer(size: targetSize)
        return render.image { ctx in
            self.draw(in: .init(origin: .zero, size: targetSize))
        }
    }
}

class SomeView: UIView {
    func initSegementedControl() {
        exampleSegmenedControl = UISegmentedControl(items:[
            leftImage.resizedImage(to: .init(width: 15, height: 15))!,
            rightImage.resizedImage(to: .init(width: 15, height: 15))!
        ])
    }    

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4896513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档