1

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

    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,我检查了比例和比例输出,无论设备如何,它们总是相同的。非常感谢。

4

1 回答 1

0

在这里找到答案:UIButton 不听内容模式设置?

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

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

于 2012-07-06T11:21:07.240 回答