2011-04-03 30 views

回答

5

您可以添加矩形的寬度和高度以獲得其他3個點的座標。

CGRect rect = view.bounds; 

CGPoint topLeft = rect.origin; 
CGPoint topRight = CGPointMake(rect.origin.x + rect.size.width, rect.origin.y); 
CGPoint bottomLeft =CGPointMake(rect.origin.x, rect.origin.y + rect.size.height); 
CGPoint bottomRight = CGPointMake(rect.origin.x + rect.size.width, 
            rect.origin.y + rect.size.height); 

然後,您可以使用CGPointApplyAffineTransform獲取它們在您指定的轉換下的轉換座標。

CGPoint center = view.center; 
CGAffineTransform transf = CGAffineTransformMakeTranslation(-rect.size.width/2, 
                  -rect.size.height/2); 
transf = CGAffineTransformConcat(transf, view.transform); 
transf = CGAffineTransformTranslate(transf, center.x, center.y); 

topLeft = CGPointApplyAffineTransform(topLeft, transf); 
//... 

(注:未測試)

1

你可以得到size.width和size.height。將這些添加到x和y將爲您提供其他座標。

+0

我忘了提我正在旋轉imageViews。 – jarryd 2011-04-03 15:00:10

+0

你將不得不自己做數學。 origin.x和origin.y也不正確。 – drewag 2011-04-03 15:01:26

+0

那麼,我在旋轉後從imageVIew創建一個CGRect並獲得了起源,但需要獲得另外兩個座標。 – jarryd 2011-04-03 15:03:45

0

雖然這些是(當然)相對於上海華,你可以使用frame屬性來獲取包含的UIImageView的起源和大小CGRect。然後,您可以簡單地將相關尺寸添加到相關的原點以獲取完整的座標集。

有關更多信息,請參見UIView類參考中的框架部分。

+0

我編輯了我的問題。是的,我做你提到的,但我是在一個旋轉,變換後的圖像coords之後查看 – jarryd 2011-04-03 15:04:50

0

構造一個旋轉矩陣http://en.wikipedia.org/wiki/Rotation_matrix。您應該計算相對於作爲旋轉中心的點的角的初始位置。將這些位置存儲在一個數組中並始終保持它們。您可以通過在2x2旋轉矩陣中傳遞角度並將它們與初始位置相乘來計算新位置。

+0

好吧,多一點工作要做,比我想象的要多。我還需要使用NSKeyedArchiver存儲UIImageViews。所以基本上,如果我在應用程序執行期間將它們歸檔,然後在重新啓動時將它們解壓縮,那麼不會有任何關於imageview的座標的數據,除非我這樣做並將其與圖像一起存儲? – jarryd 2011-04-03 15:10:40

+0

我想你將不得不將你的新座標存檔:) – 2011-04-03 15:13:45

0

好吧,給你知道旋轉的角度,這是數學拿到右上角的y座標:

Sin (angle of rotation) = height difference y/width 

因此,如果你被10度旋轉矩形,它有20pt的寬度:

Sin 10 = yDiff/20 

這意味着你可以這樣做:

yDiff = Sin 10 * 20 

這給你的DIFF y從原點的y座標到右上角的y座標。將此值添加到矩形的當前y原點以獲取右上角的實際y座標。下一步是在你的寬度上使用pythagoras,在yDiff上使用yDiff來獲得xDiff,並執行相同的操作(將其添加到x座標)以獲得右手邊的x座標。我希望這是有道理的。

現在,您只需要爲每個其他角落重新做一次 - 想象一下,如果您願意,矩形已旋轉90度,您可以重新應用邏輯,但x是y,反之亦然。:)等

2

這是我的解決方案:

  • [self]UIImageView
  • [self.transform]一個子類的變換我就[self]

    CGAffineTransform transform = CGAffineTransformMakeTranslation(-center.x, -center.y); 
    transform = CGAffineTransformConcat(transform, self.transform); 
    CGAffineTransform transform1 = CGAffineTransformMakeTranslation(center.x, center.y); 
    transform = CGAffineTransformConcat(transform, transform1); 
    
    CGPoint leftTopPoint  = CGPointApplyAffineTransform(leftTopPoint, transform); 
    CGPoint rightTopPoint = CGPointApplyAffineTransform(rightTopPoint, transform); 
    CGPoint rightBottomPoint = CGPointApplyAffineTransform(rightBottomPoint, transform); 
    CGPoint leftBottomPoint = CGPointApplyAffineTransform(leftBottomPoint, transform);