相信在初次接觸‘錨點(diǎn)’(anchorPoint)這個(gè)名詞的時(shí)候佩微,我們都會(huì)有點(diǎn)懵逼吧曹铃!記得我第一次接觸這個(gè)名詞残吩,老師是這樣解釋的:錨點(diǎn)就像船舶的錨财忽,它是用來固定船的位置的,在ios中泣侮,錨點(diǎn)的作用也有異曲同工之處即彪,確定子視圖位于父視圖的準(zhǔn)確位置,那現(xiàn)在我們就看看到底什么是錨點(diǎn)活尊,我們又會(huì)經(jīng)常使用錨點(diǎn)來做些什么隶校?
我們知道漏益,ios中,與尺寸和位置相關(guān)的幾個(gè)重要屬性有:bounds(確定自身的大小深胳,但不能確定自身在父視圖中的位置) 绰疤、frame(相對(duì)于父視圖來說的,可以確定子視圖的大小和位置)舞终,position(確定子視圖在父視圖中的位置,是視圖layer層面的一個(gè)屬性)轻庆,而anchorPoint也是layer層面的一個(gè)屬性,那我們今天先就兩個(gè)layer層面的屬性聯(lián)合起來介紹錨點(diǎn)的作用是什么敛劝,先畫個(gè)圖看看什么是錨點(diǎn)
這個(gè)就是錨點(diǎn)余爆,一個(gè)視圖上共有9個(gè)錨點(diǎn),及 x方向有0攘蔽,0.5龙屉,1,y方向也有0,0.5,1,三個(gè)值满俗,兩兩匹配就有求中情況了转捕;然后錨點(diǎn)有什么作用了,那當(dāng)然是定位了唆垃,那錨點(diǎn)怎么來定位五芝?
那我們首先使用position來輔助解釋:如果設(shè)置一個(gè)子視圖(假設(shè)就叫childView)在父視圖(假設(shè)叫做parentView)中,當(dāng)設(shè)置childView.layer.position = CGPointMake(0,0),效果如下
子視圖的中心點(diǎn)在父視圖的(0,0)位置辕万,現(xiàn)在我們?cè)诖嘶A(chǔ)上設(shè)置childView的anchorPoint:
childView.layer.anchorPoint = CGRectMake(0,0.5) ?對(duì)照錨點(diǎn)找到(0枢步,0.5)這個(gè)點(diǎn)對(duì)應(yīng)哪一個(gè)。然后效果如下:
看到了子視圖錨點(diǎn)(0渐尿,0.5)與父視圖的(0醉途,0)點(diǎn)重合, ?如果設(shè)置childView.layer.anchorPoint = CGPointMake(1,1),猜想一下砖茸,是不是子視圖的右下角的點(diǎn)與父視圖的(0隘擎,0)點(diǎn)重合了,那我們看一下效果:
正如我們猜想的凉夯,由此總結(jié)可以知道货葬,position確定子視圖在父視圖中的位置,默認(rèn)是子視圖的中心點(diǎn)與指定的position點(diǎn)重合的劲够,但如果你指定子視圖的錨點(diǎn)震桶,那么這個(gè)錨點(diǎn)會(huì)與指定的position點(diǎn)重合,從而精確的定位了子視圖在父視圖的中的位置征绎。