如何在UIimageView中设置顶部避开空间的图像

时间:2012-10-03 14:55:03

标签: iphone objective-c ios uiimageview aspect-fit

我有一个UIImageView,其内容模式Aspect Fit的大小为220x155。我正在以不同的分辨率动态插入不同的图像,但都大于UIImageView的大小。当内容模式设置为Aspect Fit时,图像将按比例缩放以适合UIImageView。

我的问题是,如果例如UIImageView中的图像缩放到220x100,我希望UIImageView也从155到100的高度缩小,以避免我的元素之间的空间。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

我写了这个方法,一旦加载图像就给我一个图像视图的框架。 所以,对我的要求与你的情况相同:

1)具有宽高比适合内容模式的图像视图 2)获取图像的确切帧(这样可以重新定位图像视图)

希望这会有所帮助:

- (CGRect) getFrameOfImage:(AsyncImageView *) imgView
{
    if(!imgView.loaded)
        return CGRectZero;

    CGSize imgSize      = imgView.image.size;
    CGSize frameSize    = imgView.frame.size;

    CGRect resultFrame;

    if(imgSize.width < frameSize.width && imgSize.height < frameSize.height)
    {
        resultFrame.size    = imgSize;
    }
    else
    {
        float widthRatio  = imgSize.width  / frameSize.width;
        float heightRatio = imgSize.height / frameSize.height;

        float maxRatio = MAX (widthRatio , heightRatio);
        NSLog(@"widthRatio = %.2f , heightRatio = %.2f , maxRatio = %.2f" , widthRatio , heightRatio , maxRatio);

        resultFrame.size = CGSizeMake(imgSize.width / maxRatio, imgSize.height / maxRatio);
    }

    resultFrame.origin  = CGPointMake(imgView.center.x - resultFrame.size.width/2 , imgView.center.y - resultFrame.size.height/2);

    return resultFrame;
}

我在这里使用AsyncImageView,但它与UIImageView的效果一样好。要记住的重要一点是在加载图像后调用此方法。

干杯!

答案 1 :(得分:1)

非常简单,你只需要获得图像的实际尺寸,这可以通过

来完成
UIImage *image = [UIImage imageName:@""];

然后你只需要设置框架 喜欢: -

imageView.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);

希望这会对你有所帮助。

答案 2 :(得分:0)

将imageview的图像设置为新图像(并因此缩放)后,您可以在imageview(imageview.image.size.height)内获取图像的高度,并相应地设置imageview的高度(帧)。