如何獲取UIImageView的4個座標?檢索旋轉的UIImageView的所有4個座標
我知道CGRect可以獲得,origin.x和origin.y,但是如何找到所有4個角?
編輯:我旋轉的UIImageViews,這就是爲什麼我問:P
如何獲取UIImageView的4個座標?檢索旋轉的UIImageView的所有4個座標
我知道CGRect可以獲得,origin.x和origin.y,但是如何找到所有4個角?
編輯:我旋轉的UIImageViews,這就是爲什麼我問:P
您可以添加矩形的寬度和高度以獲得其他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);
//...
(注:未測試)
你可以得到size.width和size.height。將這些添加到x和y將爲您提供其他座標。
構造一個旋轉矩陣http://en.wikipedia.org/wiki/Rotation_matrix。您應該計算相對於作爲旋轉中心的點的角的初始位置。將這些位置存儲在一個數組中並始終保持它們。您可以通過在2x2旋轉矩陣中傳遞角度並將它們與初始位置相乘來計算新位置。
好吧,多一點工作要做,比我想象的要多。我還需要使用NSKeyedArchiver存儲UIImageViews。所以基本上,如果我在應用程序執行期間將它們歸檔,然後在重新啓動時將它們解壓縮,那麼不會有任何關於imageview的座標的數據,除非我這樣做並將其與圖像一起存儲? – jarryd 2011-04-03 15:10:40
我想你將不得不將你的新座標存檔:) – 2011-04-03 15:13:45
好吧,給你知道旋轉的角度,這是數學拿到右上角的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,反之亦然。:)等
這是我的解決方案:
[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);
我忘了提我正在旋轉imageViews。 – jarryd 2011-04-03 15:00:10
你將不得不自己做數學。 origin.x和origin.y也不正確。 – drewag 2011-04-03 15:01:26
那麼,我在旋轉後從imageVIew創建一個CGRect並獲得了起源,但需要獲得另外兩個座標。 – jarryd 2011-04-03 15:03:45