如何在 UIImageView 中居中缩放(旋转)UIImage

Posted

技术标签:

【中文标题】如何在 UIImageView 中居中缩放(旋转)UIImage【英文标题】:How to center scale (rotate) a UIImage in a UIImageView 【发布时间】:2013-03-07 20:12:39 【问题描述】:

我需要仅使用 CGAffineTransform 在 UIImageView 中使用 contentMode UIViewContentModeTopLeft 居中和缩放 UIImage。我不能使用 contentMode UIViewContentModeCenter 因为我需要完整的 CGAffineTransform 信息。

到目前为止,我正在使用类似的东西,其中 _imageView 是 UIImageView,图像是 UIImage。

_imageView.image = image;
CGFloat scale = fmaxf(_imageView.bounds.size.width / _imageView.image.size.width, _imageView.bounds.size.height / _imageView.image.size.height);
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, _imageView.image.size.width * 0.5, _imageView.image.size.height * 0.5);
transform = CGAffineTransformScale(transform, scale, scale);    
_imageView.transform = transform;

缩放没问题,但图像总是在右下角有一些偏移。 有人知道如何在不使用 contentMode UIViewContentModeCenter 的情况下做到这一点吗?

【问题讨论】:

【参考方案1】:

试试这个:

CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
scaleAnim.removedOnCompletion = YES;
[_imageView.layer addAnimation:scaleAnim forKey:nil];

【讨论】:

您也可以尝试使用 CALayer anchorPoint。

以上是关于如何在 UIImageView 中居中缩放(旋转)UIImage的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?

在具有较大 contentSize 的 UIScrollView 中居中 UIImageView

包含旋转的 UIImageView 的 UIScrollView 不会缩放

缩放、旋转和拖动 UIImageView