多语言展示
当前在线:1715今日阅读:39今日分享:10

为IOS开发引入锚点

在进行ios开发的时候,用不惯它的很多东西,比如说view的位置和大小没有办法单独设置,而要一起初始化位置和大小,感觉非常的麻烦,可能因为乔布斯本人就是一个非常别扭的人吧。而在cocos2d里就非常方便,因为cocos2d的锚点可以很方便地设置子视图的位置,而ios里并没有锚点这个概念。所以我把cocos2d的锚点移植到了ios里,并对其做了一些修改,使其成为了有着ios特色的锚点。
方法/步骤
1

cocos2d中采用的是OpenGL ES坐标系,坐标原点在屏幕左下角。而ios采用Quartz 2D坐标系,坐标原点在屏幕左上角。在cocos2d和ios中分别把视图的坐标点设为(10,10),结果如下:

2

因为cocos2d的视图是将视图的中心点位置设置为坐标点的,而ios中的视图则是以左上角位置来设置为坐标点的。下面举例说明,请看下图

3

创建两个视图,蓝色视图左上角在坐标(5,4)处,而橙色视图右边和蓝色视图对齐,有一半的高度处于蓝色视图外面。那么如果按照ios标准的创建视图的写法,代码可以这样写:

4

可以看出如果创建视图就要计算出视图左上角的坐标,可以说非常的麻烦。而如果引入锚点的话,代码就可以这样写:

5

锚点的取值范围是[0, 1]所以可以说:锚点是子视图用来设置位置的一个定位点,使用锚点就不会用子视图的宽高参与计算,省去了麻烦的计算,从而让代码更优雅。

6

先初始化视图大小,然后设置视图的位置。这样橙色视图的坐标点就是(W, H),锚点是(1, 0.5),通过这两个点就可以设置视图的准确位置了,根本就不用去费劲计算橙色子视图的左上角的坐标了。

7

设置一个子视图的坐标时,锚点(0, 0)表示把子视图的左上角放到该坐标的位置,锚点(0.5, 0.5)表示把子视图的中点放到该坐标的位置。

8

通过category为UIView添加设置锚点的方法,所有view的子类就可以使用该方法。类里面自定义了一些获取和设置view的大小和位置的方法。代码里通过self.width就能取到view的宽度了,而不用写self.frame.size.width。通过代码也可以清楚地知道:实现锚点的方法其实很简单,就是在setPosition:atAnchorPoint:方法里面利用锚点和子视图的宽高进行计算,从而调整了子视图的位置。

推荐信息