缩放 UIImage 以适应 UIButton 的问题

Posted

技术标签:

【中文标题】缩放 UIImage 以适应 UIButton 的问题【英文标题】:Problems scaling a UIImage to fit a UIButton 【发布时间】:2012-07-05 13:37:42 【问题描述】:

我有一组按钮和不同大小的图像。我想缩放每个图像,以便它以正确的纵横比适合按钮。缩放图像后,我将按钮的图像属性设置为缩放版本。

    UIImage *scaledImage = [image scaledForButton:pickerButton];
    [pickerButton setImage:scaledImage forState:UIControlStateNormal];

我的 scaledForButton 方法是在 UIImage 的类扩展中定义的。它看起来像这样:

- (UIImage *)scaledForButton:(UIButton *)button 

    // Check which dimension (width or height) to pay respect to and
    // calculate the scale factor
    CGFloat imageRatio = self.size.width / self.size.height; 
    CGFloat buttonRatio = button.frame.size.width / button.frame.size.height;
    CGFloat scaleFactor = (imageRatio > buttonRatio ? self.size.width/button.frame.size.width : self.size.height/button.frame.size.height);

    // Create image using scale factor
    UIImage *scaledimage = [UIImage imageWithCGImage:[self CGImage]
                                               scale:scaleFactor
                                         orientation:UIImageOrientationUp];
    return scaledimage;    

当我在 iPad2 上运行它时,它工作正常并且图像缩放正确。但是,如果我在视网膜显示器(模拟器和设备上)上运行它,图像无法正确缩放并被挤压到按钮中。

任何想法为什么这只会发生在视网膜上?这几天我一直在挠头,但无法弄清楚。他们都运行相同的 ios,我检查了比例和比例输出,无论设备如何,它们总是相同的。非常感谢。

【问题讨论】:

它可能是 "CGFloat scaleFactor = (imageRatio > buttonRatio)? self.size.width/button.frame.size.width : self.size.height/button.frame.size.height; " 您在 iPad2 和新 iPad 中都记录了“buttonRatio”吗? 是的,我已经为这两种设备记录了它们,并且每次都相同。我使用 2x 图像进行视网膜显示。程序是否可能正在调整 1x 的大小,然后改用 2x? 你检查过CGImage的尺寸吗?视网膜情况下 CGImage 的尺寸将是非视网膜版本的两倍。 (或者不是?)但是 UI... 坐标中的 scaleFactor 总是相同的。 只是提供一个替代方案:我个人会使用 .contentMode 并将图像分配给按钮大小的临时图像视图。 contentMode 可能会因(imageRatio > buttonRatio)而异,但不一定会有所不同(我不太确定您想要实现什么)。然后确定图像视图的 .image 的大小并从那里开始。 【参考方案1】:

在这里找到答案:UIButton doesn't listen to content mode setting?

如果您要设置 .contentMode,似乎您必须设置 UIButton 的 imageView 属性,而不仅仅是 UIButton,然后它才能正常工作。

iPad 3 上的问题正如 Herman 所建议的那样 - CGImage 仍然比 UIButton 大很多,因此即使按比例缩小,它仍然必须调整大小以适应按钮。

【讨论】:

以上是关于缩放 UIImage 以适应 UIButton 的问题的主要内容,如果未能解决你的问题,请参考以下文章

矩形图像缩放以适应正方形以与 MPMediaItemArtwork 一起使用

为 UIImageView 手动缩放 UIImage

iOS - 如何正确缩放具有不同图像大小的 UIButton(如 Facebook 新闻提要)?

在方向更改时自动缩放 UIView 以按比例缩放以适合父视图

UIButton 中像素精确的 UIImage 重采样

iOS:UIImage 缩放以填充 UIView