4

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

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

我怎样才能做到这一点?

4

3 回答 3

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. 要记住的重要一点是在加载图像后调用此方法。

干杯!

于 2012-10-05T10:06:59.407 回答
1

它非常简单,您只需要获取图像的实际大小,可以通过

UIImage *image = [UIImage imageName:@""];

那么你只需要设置框架就像: -

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

希望这对您有所帮助。

于 2012-10-03T15:50:55.013 回答
0

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

于 2012-10-03T15:20:58.740 回答