缩小按钮图像以保留纵横比

时间:2015-05-16 12:12:09

标签: ios uiimageview uibutton

以下主题 scale Image in an UIButton to AspectFit?讨论了在缩放按钮时保留图像宽高比的几种方法。

事实上,当目标图像大小大于实际资源图像大小时,只有button.imageView!.contentMode = UIViewContentMode.ScaleAspectFit才能完成工作。但是,如果资源图像大于目标,则ScaleAspectFit应用于图像,而imageView大小保持不变,图像两侧未使用的区域,因此文本没有空间。

在下面的代码中,我尝试手动缩放图像并为其指定按钮的imageView。然后,imageView大小也会更改以匹配图像的大小。我放置打印件以确保正确缩放图像,并接受新的帧大小。我禁用了#34; Autoresize subviews"对于按钮,但没有任何帮助:使用ScaleAspectFit仍然有空白点,没有 - 图像是"压扁":

 let img = imageView.image!
 var ivFrame = imageView.frame
 println("Image view Frame Size Original: \(ivFrame.size.width)x\(ivFrame.size.height)")

 let imgScaled = scaleImage(img,
     CGSize(width: ivFrame.size.height, height: ivFrame.size.height))
 imageView.image = imgScaled

 let imageSize = imgScaled.size
 println("Image Size Scaled: \(imageSize.width)x\(imageSize.height)");

 imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
                    imageSize.width, imageSize.height)
 ivFrame = imageView.frame;
 println("Image view Frame Size New: \(ivFrame.size.width)x\(ivFrame.size.height)");
 imageView.backgroundColor=UIColor.redColor() // to see image area

控制台输出:

Image view Frame Size Original: 90.0x39.0
Image Size Scaled: 39.0x39.0
Image view Frame Size New: 39.0x39.0

enter image description here

1 个答案:

答案 0 :(得分:-1)

使用stackoverflow你经常会得到一个负面的标记,但通常是一个肯定的答案:)这就是我解决问题的方法。

将图像分配给button.imageView可能适用于常规按钮,但我的按钮是自定义按钮。我将button.setBackgroundImage用于不同的控制状态,这可能会导致麻烦。正确的方法是使用button.setImage而不是button.imageView.image

            let targetSize = button.frame.size.height * 0.6
            let imgScaled = scaleImage(button.imageView!.image!,
                        CGSize(width: targetSize, height: targetSize))
            button.setImage(imgScaled, forState:UIControlState.Normal)
            button.setImage(imgScaled, forState:UIControlState.Selected)
            button.setImage(imgScaled, forState:UIControlState.Disabled)

仅仅为UIControlState.Normal分配图片就足够了,我没有尝试过。但到目前为止还不错!