2012-04-24 47 views
2

我使用UIGestureRecognizers旋轉圖像並使用uiimageview調整圖像大小。現在的問題是我需要從UIImageView變換(這是CGAffineTransform)屬性獲取圖像的新大小。我在StackOverFlow中發現了這個代碼,但它沒有返回正確的值。由於imageview不僅可以調整大小,而且可以旋轉。所以我的問題是如何從旋轉和調整大小的UIImageView的transform屬性中獲取新的大小和位置?應用CGAffineTransform後從圖像中獲取圖像的新大小

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

任何人都可以幫忙嗎?

感謝

ANSWER OK,我找到了解決。造成尺寸計算問題的主要原因是旋轉。那麼在這裏檢查了一下。

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

從Apple doc

由於仿射變換不保留一般長方形的 功能CGRectApplyAffineTransform返回包含的變換角點的最小矩形 rect參數。

也許你應該試試這個:CGSizeApplyAffineTransform

返回的高度和寬度從現有 高度和寬度的變換得到。

嘗試使用ImageView的老大小:

​​
+2

謝謝!但我已經試過了,這個函數正確返回寬度,但高度值不準確。任何想法? – andy 2012-04-24 16:12:28

+0

嗨,你有沒有得到答案,請幫助我@Jonathan Naguin – Babul 2012-12-10 11:46:31

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; 
} 
+0

什麼是TB_CGPointCalcDistance? – 2015-08-09 10:14:27

+0

_TB_CGPointCalcDistance_是用於計算點之間距離的自定義函數:sqrt(dx * dx + dy * dy) – 2015-08-10 04:51:07