首页 > 代码库 > ios中关于对锚点的理解
ios中关于对锚点的理解
锚点在ios中见到的地方不多,大部分用在动画中。
今天看到一个动画,上面都是关于锚点的,锚点这个概念在两年前看cocos2d得基本概念时接触过,当时没怎么看,今天看到了,就在好好的学一下。
看了一篇blog,是关于锚点的,就借鉴一些上面的图像:
cocos2d里采用OpenGL ES坐标系,坐标原点在屏幕左下角。而ios采用的是Quartz 2D坐标系,坐标原点在屏幕左上角。
在cocos2d和ios中分别把视图的坐标点设为(10,10),结果如下:
那么什么是锚点呢?下面以一个例子来说明:
比如要创建以下两个视图,蓝色视图左上角在坐标(5,4)处,而橙色视图右边和蓝色视图对齐,有一半的高度处于蓝色视图外面。
- UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(5, 4, W, H)];
- blueView.backgroundColor = [UIColor blueColor];
- [self.view addSubview:blueView];
- UIView *orangeView = [[UIView alloc] initWithFrame:CGRectMake(W-w, H-h/2, w, h)];
- orangeView.backgroundColor = [UIColor orangeColor];
- [blueView addSubview:orangeView];
可见,使用锚点省去了苦逼的计算过程。当然了,锚点也是针对子视图去设计的,锚点掌握好了,我们就不用再去计算x,y坐标了。
- UIView *blueView = [[UIView alloc] initWithSize:CGSizeMake(W, H)];
- [blueView setPosition:CGPointMake(5, 4) atAnchorPoint:CGPointMake(0, 0)];
- blueView.backgroundColor = [UIColor blueColor];
- [self.view addSubview:blueView];
- UIView *orangeView = [[UIView alloc] initWithSize:CGSizeMake(w, h)];
- [orangeView setPosition:CGPointMake(W, H) atAnchorPoint:CGPointMake(1, 0.5)];
- orangeView.backgroundColor = [UIColor orangeColor];
- [blueView addSubview:orangeView];
就拿上面这个例子分析一下吧:
把俯视图蓝色view的左边点(W,H)作为自身的锚点(1,0.5)【注意:锚点是在自身上找,这个点一一映射的有一个父view的坐标,可以通过这两个值来计算子视图的view.frame.origin】.
好好理解上句话,锚点的坐标范围如下:
这是在Quartz 2D坐标系中得锚点。
下面看一下代码中把父视图的点作为自身锚点的方法。
- (void)setPosition:(CGPoint)point atAnchorPoint:(CGPoint)anchorPoint { CGFloat x = point.x - anchorPoint.x * self.width; CGFloat y = point.y - anchorPoint.y * self.height; [self setOrigin:CGPointMake(x, y)]; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。