Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何从倒Y轴的角度处理平移矩阵_Iphone_Math_Matrix_Translation - Fatal编程技术网

Iphone 如何从倒Y轴的角度处理平移矩阵

Iphone 如何从倒Y轴的角度处理平移矩阵,iphone,math,matrix,translation,Iphone,Math,Matrix,Translation,我的usercase是一个iphone应用程序,我在其中对图像的缩放、旋转和平移进行动画处理 因此,我浓缩所有内容并将其提供给transform属性,但有一个问题: 由于我的图像大小不同,因此正确定位它们是一个问题。我已经习惯了倒y轴坐标系,所以我希望我的图像在y轴上精确定位在60像素处 那么,如何从原始笛卡尔y轴更改为反向y轴视点呢?对于每个y坐标,y=top-y,其中top是正在绘制的边界框顶部的y坐标。对于每个y坐标,y=top-y,其中top是要绘制的边界框顶部的y坐标。正如smacl所

我的usercase是一个iphone应用程序,我在其中对图像的缩放、旋转和平移进行动画处理

因此,我浓缩所有内容并将其提供给transform属性,但有一个问题:

由于我的图像大小不同,因此正确定位它们是一个问题。我已经习惯了倒y轴坐标系,所以我希望我的图像在y轴上精确定位在60像素处


那么,如何从原始笛卡尔y轴更改为反向y轴视点呢?

对于每个y坐标,y=top-y,其中top是正在绘制的边界框顶部的y坐标。

对于每个y坐标,y=top-y,其中top是要绘制的边界框顶部的y坐标。

正如smacl所指出的,最简单的方法是使用(screenheight-viewheight-y)而不是视图原点中的y,将原点移动到屏幕的左下角

但是,可以使用CATTransform3D翻转主视图图层的坐标系。我这样做是为了在我的iPhone应用程序和Mac客户端之间共享相同的核心动画CALayer布局代码(iPhone反转CALayers的标准石英坐标系以匹配UIView)。要启用此功能,只需放置线

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
在承载UIView的图层的初始化代码中。请记住,这将翻转Calayer,因此这些层中的任何UIKit文本呈现也可能需要使用类似以下代码翻转:

CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);

UIFont *theFont = [UIFont fontWithName:@"Helvetica" size:fontSize];
[text drawAtPoint:CGPointZero withFont:theFont];

CGContextRestoreGState(context);
您可以使用CGAffineTransform执行类似类型的反转,但您还需要应用转换来实现该功能:

CGAffineTransform flipTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
flipTransform = CGAffineTransformScale(flipTransform, 1.0f, -1.0f);

您可以使用仿射变换使用cgpointApplyAffinetTransform()转换原点坐标。

正如smacl所指出的,最简单的方法是使用(screenheight-viewheight-y)而不是视图原点中的y,将原点移到屏幕的左下角

但是,可以使用CATTransform3D翻转主视图图层的坐标系。我这样做是为了在我的iPhone应用程序和Mac客户端之间共享相同的核心动画CALayer布局代码(iPhone反转CALayers的标准石英坐标系以匹配UIView)。要启用此功能,只需放置线

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
在承载UIView的图层的初始化代码中。请记住,这将翻转Calayer,因此这些层中的任何UIKit文本呈现也可能需要使用类似以下代码翻转:

CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);

UIFont *theFont = [UIFont fontWithName:@"Helvetica" size:fontSize];
[text drawAtPoint:CGPointZero withFont:theFont];

CGContextRestoreGState(context);
您可以使用CGAffineTransform执行类似类型的反转,但您还需要应用转换来实现该功能:

CGAffineTransform flipTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
flipTransform = CGAffineTransformScale(flipTransform, 1.0f, -1.0f);
您可以使用仿射变换使用cgpointApplyAffinetTransform()转换原点坐标