为 UIImageView 手动缩放 UIImage

Posted

技术标签:

【中文标题】为 UIImageView 手动缩放 UIImage【英文标题】:Manually Scaling UIImage for UIImageView 【发布时间】:2012-05-21 19:13:26 【问题描述】:

手动重现的最佳方法是什么

contentMode = UIViewContentModeScaleAspectFit;

不使用它?

我需要缩放 UIImageView(在滚动视图内)以适应纵横比。我需要知道图像的新尺寸才能在其上绘制叠加层。

【问题讨论】:

【参考方案1】:

最近,我需要在 ImageView 中找到图像的框架,以便在该图像上添加可触摸的视图,我就是这样做的:

-(void)calculateScaleAndContainerFrame
    if(!imageView || !image) return;

    CGSize imageSize = image.size;
    CGSize imageViewSize = imageView.frame.size;

    float imageRatio = imageSize.width / imageSize.height;
    float viewRatio = imageViewSize.width / imageViewSize.height;

    if(imageRatio > viewRatio)
        scale = imageSize.width / imageViewSize.width;
    else
        scale = imageSize.height / imageViewSize.height;
    

    CGRect frame = CGRectZero;

    frame.size = CGSizeMake(roundf(imageSize.width / scale), roundf(imageSize.height / scale));
    frame.origin = CGPointMake((imageViewSize.width - frame.size.width) / 2.0, (imageViewSize.height - frame.size.height) / 2.0);

    [container setFrame:frame];

我很确定您可以将其用作指南,将 imageViewSize 替换为滚动视图(或您要放入图像的视图)的内容大小。

注 1:在我的情况下,我需要将视图垂直居中,如果不这样做,只需在我设置框架原点的那一行将 y 设置为 0。如果您不想水平居中图像,则 x 也一样。

注意 2:无论如何,这不是您可以插入项目并工作的代码,您可能必须阅读它,理解它,然后将该方法应用于您自己的项目。我现在没有时间根据您的需要对其进行修改。

注意 3:使用该代码,我设法在使用该内容模式的图像视图中完美地查看图像,因此它可以工作。

【讨论】:

谢谢!我能够基于此代码创建 CGAffineTransform。

以上是关于为 UIImageView 手动缩放 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

缩放 UIImageView 时内容失真

UIImageView 手势(缩放、旋转)问题

如何裁剪用户缩放的 UIImageView

UIImageView:旋转和缩放。如何保存结果?

如何在 UIImageView iOS 上设置阴影渐变图像

UIImageView 缩放图片