2

我正在使用 UIGestureRecognizers 使用 uiimageview 旋转和调整图像大小。现在的问题是我需要从 UIImageView 变换(即 CGAffineTransform)属性中获取图像的新大小。我在 StackOverFlow 上找到了这段代码,但它没有返回正确的值。由于 imageview 不仅调整大小而且旋转。所以我的问题是如何从旋转和调整大小的 UIImageView 的变换属性中获取新的大小和位置?

CGRect newRect = CGRectApplyAffineTransform(self.imageView.bounds, self.imageView.transform);

任何人都可以帮忙吗?

谢谢

回答 好的,我找到了解决办法。造成尺寸计算问题的主要原因是旋转。那么这里做了什么检查。

 CGFloat angle = atan2(self.imageView.transform.b, self.imageView.transform.a);
 CGAffineTransform tempTransform = CGAffineTransformRotate(self.imageView.transform, -angle);  
 CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height), tempTransform);

谢谢大家

4

2 回答 2

1

您可以使用临时点来模拟尺寸尺寸的转换,如下所示:

CG_INLINE CGSize FAE_CGSizeCalcDimentionsAfterApplyTransformation(CGSize size, CGAffineTransform transform)
{
    CGPoint widthPoint = CGPointMake(size.width, 0.0);
    CGPoint heightPoint = CGPointMake(0.0, size.height);

    CGPoint centerAfterTransfrom = CGPointApplyAffineTransform(CGPointZero, transform);
    CGPoint widthAfterTransform = CGPointApplyAffineTransform(widthPoint, transform);
    CGPoint heightAfterTransform = CGPointApplyAffineTransform(heightPoint, transform);

    CGSize sizeAfterTransformation = CGSizeMake(TB_CGPointCalcDistance(centerAfterTransfrom, widthAfterTransform), TB_CGPointCalcDistance(centerAfterTransfrom, heightAfterTransform));

    return sizeAfterTransformation;
}
于 2014-08-09T06:14:08.750 回答
0

来自苹果文档

因为仿射变换一般不保留矩形,所以函数 CGRectApplyAffineTransform 返回包含 rect 参数的变换角点的最小矩形。

也许你应该试试这个CGSizeApplyAffineTransform::

返回由现有高度和宽度转换产生的高度和宽度。

尝试使用 imageView 的旧尺寸:

CGSize oldImageSize = imageView.bounds.size;

// Transforming code here

CGAffineTransform currentTransform = imageView.transform;
CGSize newImageSize = CGSizeApplyAffineTransform(oldImageSize, currentTransform);
于 2012-04-24T12:50:19.010 回答