ios中關於對錨點的理解
阿新 • • 發佈:2019-02-17
錨點在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];
- 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
- [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)];
}