相信在初次接觸‘錨點’(anchorPoint)這個名詞的時候,我們都會有點懵逼吧!記得我第一次接觸這個名詞,老師是這樣解釋的:錨點就像船舶的錨,它是用來固定船的位置的,在ios中,錨點的作用也有異曲同工之處,確定子視圖位于父視圖的準確位置,那現在我們就看看到底什么是錨點,我們又會經常使用錨點來做些什么?
我們知道,ios中,與尺寸和位置相關的幾個重要屬性有:bounds(確定自身的大小,但不能確定自身在父視圖中的位置) 、frame(相對于父視圖來說的,可以確定子視圖的大小和位置),position(確定子視圖在父視圖中的位置,是視圖layer層面的一個屬性),而anchorPoint也是layer層面的一個屬性,那我們今天先就兩個layer層面的屬性聯合起來介紹錨點的作用是什么,先畫個圖看看什么是錨點
這個就是錨點,一個視圖上共有9個錨點,及 x方向有0,0.5,1,y方向也有0,0.5,1,三個值,兩兩匹配就有求中情況了;然后錨點有什么作用了,那當然是定位了,那錨點怎么來定位?
那我們首先使用position來輔助解釋:如果設置一個子視圖(假設就叫childView)在父視圖(假設叫做parentView)中,當設置childView.layer.position = CGPointMake(0,0),效果如下
子視圖的中心點在父視圖的(0,0)位置,現在我們在此基礎上設置childView的anchorPoint:
childView.layer.anchorPoint = CGRectMake(0,0.5) ?對照錨點找到(0,0.5)這個點對應哪一個。然后效果如下:
看到了子視圖錨點(0,0.5)與父視圖的(0,0)點重合, ?如果設置childView.layer.anchorPoint = CGPointMake(1,1),猜想一下,是不是子視圖的右下角的點與父視圖的(0,0)點重合了,那我們看一下效果:
正如我們猜想的,由此總結可以知道,position確定子視圖在父視圖中的位置,默認是子視圖的中心點與指定的position點重合的,但如果你指定子視圖的錨點,那么這個錨點會與指定的position點重合,從而精確的定位了子視圖在父視圖的中的位置。