2009-03-02 111 views
1

我的用户套件是一个iphone应用程序,我在图像的缩放,旋转和平移上做动画。如何在翻转的Y轴角度处理翻译矩阵

所以,我Concat的一切,将其提供给变换属性,但有一个问题:

由于我的图片大小不等,这对他们正确定位的问题。我习惯了一个倒y轴坐标系,所以我想让我的图像精确地定位在y轴上的60个像素处。

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

回答

4

由于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()。

0

对于每个Y坐标,Y =顶部,y,其中最高的是你在绘制边框的顶部y坐标。