2017-03-02 88 views

回答

2

您可以使用仿射變換矩陣,這個文檔片斷是從我的代碼取從核心圖片/核心圖形轉換成的UIKit:

CGAffineTransform t = CGAffineTransformMakeScale(1, -1); 
t = CGAffineTransformTranslate(t,0, -imageView.bounds.size.height); 

基本上你需要:

  • 否定y軸
  • 通過視圖高度

翻譯的原點後,您可以使用這些幾何函數來計算你的矩形或點

CGPoint pointUIKit = CGPointApplyAffineTransform(pointCI, t); 
CGRect rectUIKit = CGRectApplyAffineTransform(rectCI, t); 

在斯威夫特3.X:

var t = CGAffineTransform(scaleX: 1, y: -1) 
t = t.translatedBy(CGAffineTransform(translationX: 0, y: -imageView.bounds.size.hieght) 
let pointUIKit = CGPointApplyAffineTransform(pointCI, t) 
let rectUIKIT = CGRectApplyAffineTransform(rectCI, t) 
1

隨着在底部的起源左左上,你需要做什麼與X軸,但你需要翻轉軸右。 UIKit(或者在這種情況下,Core Graphics)使用CGPoints。核心圖像通常使用一個CIVectors,它可以有2,3或4個軸角度。

這裏有一個簡單的函數,會變成一個CGPoint(X,Y)爲CIVector(X,Y):

func createVector(_ point:CGPoint, image:CIImage) -> CIVector { 
    return CIVector(x: point.x, y: image.extent.height - point.y) 
} 
+0

是,正如dfd所說。座標值之間的唯一區別就是視圖在y軸上的高度。 – Magnas