我的用户案例是一个iphone应用程序,我在其中对图像的缩放,旋转和平移进行动画制作。

所以,我将所有内容连接起来并将其提供给transform属性,但是有一个问题:

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

那么,我如何从原始的笛卡尔y轴改变为反转的y轴视角呢?

有帮助吗?

解决方案

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

但是,您可以使用CATransform3D翻转主视图图层的坐标系。我这样做,以便我可以在我的iPhone应用程序和Mac客户端之间共享相同的Core Animation CALayer布局代码(iPhone反转CALayers的普通Quartz坐标系以匹配UIViews的那个)。要启用此功能,您只需要放置

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);

在您的图层托管UIView的初始化代码中。请记住,这将翻转您的CALayers,因此这些图层中的任何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);

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top