Pocket

2019-09-15 22:26栏目:专项工作
TAG:

本文原文发布于2013年8月12日于微信号“Mac工具控”

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

一句话就是剥离或轻量化 Controller 中关于 View 和 Model 的部分。

今天讲讲我天天都要用的一款稍后阅读类的软件吧:Pocket

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

MVC 有人称之为 Massive View Controller。

现在阅读的资料越来越多,相信很多朋友也都有自己的“稍后阅读”体系,比如Mac里面最简单原生的就是用Safari里面的阅读列表,有人用Evernote的,也有人用Instapaper的。其实用什么软件都无所谓,最重要的是自己用着顺手,咱们是阅读内容,又不是消费软件的,感情不是?

Mac

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

-isFlipped;

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

MVC 并没有做太多事情来解决 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里,许多逻辑被放在 View Controller 里。它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic)”,以 MVVM 属术语来说,就是那些将 Model 数据转换为 View 可以呈现的东西的事情,例如将一个 NSDate 转换为一个格式化过的 NSString。

上面几款我以前都用过,Safari是只能在mac和ios的Safari浏览器上使用,通用性不强,而且我是Safari和Chrome同时使用,诸多不便弃之;instapaper没有Mac客户端弃之;evernote作为最后端的资料留存地在初次阅读也不使用。于是就一直使用Pocket至今~

iOS

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

  • UIKit(cocoa Touch层核心framework) Y轴向下

  • CALayer Y轴向下

  • Core Graphics Y轴向上

  • OpenGL ES Y轴向上

    Core Animation可以通过 CALayer的geometryFlipped 属性来适配这两种情况,它决定了一个图层的坐标是否相对于父图层垂直翻转,是一个BOOL类型。我们可以设置它为YES则子图层将会被垂直翻转。

    OpenGL-ES是 iPhone SDK的2D和3D绘制引擎,它使用左手坐标系,它的坐标系也是y轴向上的,如果不考虑z轴,在二维下它的坐标系和Quartz是一样的.(OpenGL 渲染处理 1.0,2.0 截止到现在3.0,从固定管线到可编程管线,已经提供很大程度自定义操作,在人们通过眼睛看到世间物体到最后通过设备进行输出显示在计算机屏幕,手机屏幕上这一过程 。。。==后续总结)

    使用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);

垂直翻转投影矩阵

// 图片被颠倒的绘制到contextCGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);// 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );

图片 1MVVM

版权声明:本文由ag真人发布于专项工作,转载请注明出处:Pocket