我正在使用UIGestureRecognizers来使用uiimageview旋转和调整图像大小。现在的问题是我需要从UIImageView转换(这是CGAffineTransform)属性获取图像的新大小。我在StackOverFlow中找到了这段代码,但它没有返回正确的值。由于imageview不仅可以调整大小,还可以旋转。所以我的问题是如何从旋转和调整大小的UIImageView的转换属性中获取新的大小和位置?
CGRect newRect = CGRectApplyAffineTransform(self.imageView.bounds, self.imageView.transform);
任何人都可以提供帮助吗?
由于
ANSWER 好的,我找到了解决办法。在尺寸计算中产生问题的主要原因是旋转。所以这里做了什么检查。
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);
谢谢大家
答案 0 :(得分: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;
}
答案 1 :(得分:0)
来自Apple doc:
因为仿射变换一般不保留矩形,所以 function CGRectApplyAffineTransform返回最小的矩形 包含rect参数的转换角点。
也许你应该试试这个:CGSizeApplyAffineTransform
:
返回变换得到的高度和宽度 现有的高度和宽度。
尝试使用imageView的旧尺寸:
CGSize oldImageSize = imageView.bounds.size;
// Transforming code here
CGAffineTransform currentTransform = imageView.transform;
CGSize newImageSize = CGSizeApplyAffineTransform(oldImageSize, currentTransform);