我有一个UIImageView
内容模式Aspect Fit大小为220x155。我以不同的分辨率动态插入不同的图像,但都大于UIImageView的大小。由于内容模式设置为Aspect Fit,图像将根据比例进行缩放以适合UIImageView。UIImageView:将大小更改为图片大小?
我的问题是,如果例如UIImageView内的图像缩放到220x100,我想UIImageView从155的高度缩小到100,以避免我的元素之间的空间。
我该怎么做?
我有一个UIImageView
内容模式Aspect Fit大小为220x155。我以不同的分辨率动态插入不同的图像,但都大于UIImageView的大小。由于内容模式设置为Aspect Fit,图像将根据比例进行缩放以适合UIImageView。UIImageView:将大小更改为图片大小?
我的问题是,如果例如UIImageView内的图像缩放到220x100,我想UIImageView从155的高度缩小到100,以避免我的元素之间的空间。
我该怎么做?
如果我给你的权利,这将是这样的:在宽度
UIImage * img = [UIImage imageNamed:@"someImage.png"];
CGSize imgSize = img.size;
计算规模比:得到的图像尺寸
float ratio=yourImageView.frame.size.width/imgSize.width;
检查缩放高度(使用相同的比率以保持宽高比)
float scaledHeight=imgSize.height*ratio;
if(scaledHeight < yourImageView.frame.size.height)
{
//update height of your imageView frame with scaledHeight
}
非常帮助我。谢谢 – 2013-09-06 13:31:28
Last edit:
看来我误解了这个问题。
要获得实际大小,你可以尝试:
CGSize imageSize = img.size;
CGSize viewSize = imageView.frame.size;
CGSize actualSize;
if (imageSize.width > imageSize.height) {
actualSize.width = imageSize.width > viewSize.width ? viewSize.width : imageSize.width;
actualSize.height = imageSize.height * actualSize.width/imageSize.width;
}
else {
actualSize.height = imageSize.height > viewSize.height ? viewSize.height : imageSize.height;
actualSize.width = imageSize.width * actualSize.height/imageSize.height;
}
好吧,那是行不通的。假设我的图像是440x200。当这个图像被插入到我的ImageView中时,它的大小将被更改为220x100以适应UIImageView。你的代码会将UIImageView的高度设置为200,而我想在UIImageView缩放图像后知道图像的高度。 – dhrm 2012-01-02 14:16:57
您可以随时检查高度,只有在图像高度小于当前图像的最大高度时才应用此高度,然后才应用此类更改。 – 2012-01-02 14:21:29
对不起,但我不确定你了解我的问题。您的代码会将UIImageView的大小更改为我的图像大小 - 这不是我想要的。我希望我的图像适合我的220x115盒子。但是当图像的比例不像我的220x115盒子的比例时,有时会比UIImageView的顶部和底部的白色空间更高。为了避免这种情况,我想将UIImageView的高度缩小到它缩小图像的高度。 – dhrm 2012-01-02 14:31:49
基于迈克尔的答案,这里是一个完整的方法
+ (CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
float widthScale = 0;
float heightScale = 0;
widthScale = boxSize.width/originalSize.width;
heightScale = boxSize.height/originalSize.height;
float scale = MIN(widthScale, heightScale);
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
return newSize;
}
我在我的项目中使用这个功能,它运作良好。 – 2012-09-09 23:51:43
编辑为史蒂芬Stefanik的回答是:这种方法休息时originalSize是{0,0}。也许考虑这些变化
-(CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
if (originalSize.height == 0) {
originalSize.height = boxSize.height;
}
if (originalSize.width == 0) {
originalSize.width = boxSize.width;
}
float widthScale = 0;
float heightScale = 0;
widthScale = boxSize.width/originalSize.width;
heightScale = boxSize.height/originalSize.height;
float scale = MIN(widthScale, heightScale);
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
return newSize;
}
我有一个相同的问题图像设置在中心,但获得上下空间。我该如何解决它?请帮助我 – Hiren 2012-10-03 14:48:31