iOS 坐标系

2017-05-02  本文已影响696人  kakukeme

iOS 坐标系

参考链接: http://www.jianshu.com/p/34dc7c2c974f

笛卡尔发明了平面直角坐标系,坐标系的作用是为了便于描述点的位置。(极坐标系,通过到原点的距离以及夹角角度来表示一个点。)在笛卡尔的平面坐标系的基础上出现了三维坐标系,常用的三维坐标系分两种:左手坐标系和右手坐标系。(大拇指指向z轴,其他四指沿着x轴到y轴方向)

在Mac,IOS中各种坐标系交错使用,然而,z轴的正方向总是指向观察者,也就是垂直屏幕平面向上。

Mac

在Mac中NSView的坐标系默认是右手坐标系(View其实是二维坐标系,但是为了方便我们可以假设其是三维坐标系,只是所有界面的变化都是在xy平面上),原点在左下角. NSView提供了一个可以用于覆盖的方法

-(BOOL)isFlipped;

此默认返回NO,当返回YES的时候,则坐标系变成左手坐标系,坐标原点变成左上角。

IOS

在iOS的UIView中,没有所谓的Flipped Coordinate的概念,统一使用左手坐标系,也就是坐标原点在左上角.然而不同的框架下却有不同:

** 使用Core Graphics画图的坐标系都是右手坐标系,由于UIKit的提供的高层方法会自动处理CTM(比如drawInRect方法),所以无需自己在CG的上下文中做处理,然而当使用CG的相关函数画图到UIView上的时候,需要注意CTM的Flip变换,要不然会出现界面上图形倒过来的现象:**


在绘制到context前翻转坐标系

CGContextTranslateCTM(context, 0, height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);

垂直翻转投影矩阵

// 图片被颠倒的绘制到context
CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);

// 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );
上一篇 下一篇

猜你喜欢

热点阅读