将 UIKit 坐标转换为 Quartz/CoreImage (Swift)

Ada*_*ard 3 core-image coordinates ios swift quartz

有没有办法将 UIKit 坐标(0,0 左上)转换为 Quartz/CoreImage(0,0 左下)?在这里找不到任何与此相关的快速信息。

And*_*rea 5

您可以使用仿射变换矩阵,此片段取自我的代码,用于将 Core Image / Core Graphics 转换为 UIKit:

CGAffineTransform t = CGAffineTransformMakeScale(1, -1);
t = CGAffineTransformTranslate(t,0, -imageView.bounds.size.height);
Run Code Online (Sandbox Code Playgroud)

基本上你需要:

  • 对 y 轴取反
  • 按视图高度平移原点

之后,您可以使用这些几何函数来计算您的矩形或点

CGPoint pointUIKit = CGPointApplyAffineTransform(pointCI, t);
CGRect rectUIKit = CGRectApplyAffineTransform(rectCI, t);
Run Code Online (Sandbox Code Playgroud)

在 Swift 3.x 中:

var t = CGAffineTransform(scaleX: 1, y: -1)
t = t.translatedBy(x: 0, y: -imageView.bounds.size.height)
let pointUIKit = pointCI.applying(t)
let rectUIKIT = rectCI.applying(t)
Run Code Online (Sandbox Code Playgroud)