ios之坐標(biāo)系轉(zhuǎn)換

hello,小伙伴們,大家好!

? ?坐標(biāo)系轉(zhuǎn)換,不知道大家接觸的多不多,我個(gè)人認(rèn)為咋們開發(fā)中很多地方都可以用到這個(gè)知識(shí)點(diǎn)。那么何為坐標(biāo)系轉(zhuǎn)換了,可以這么理解:就是在同一屏幕可視范圍內(nèi),可以將任意父控件的子控件的坐標(biāo)系,轉(zhuǎn)換到同一坐標(biāo)系中。

?思路:判斷兩個(gè)不同父控件的子控件是否有交集或者重合。

?我們先從最簡(jiǎn)單的開始吧!

1,同一父控件怎么判斷,不同子控件是否有交集。

? ? ? ? a,同一父控件類,兩個(gè)不同的子控件(相交)

父控件相同

從上圖可以清晰看到,紅色view 和綠色view 是相交的。用下面這個(gè)方法就可以做出判斷:

BOOLisIntersect = CGRectIntersectsRect(_redView.frame,_greenView.frame);

輸出結(jié)果:2017-03-02 16:42:19.471 text[12734:217314] ?1?

CGRectIntersectsRect這個(gè)方法返回的是BOOL值,如果相交返回YES,否則為NO;

? ?b,同一父控件類,兩個(gè)不同的子控件(不相交)

父控件相同,子控件無交集

BOOLisIntersect = CGRectIntersectsRect(_redView.frame,_greenView.frame);

輸出結(jié)果:2017-03-02 16:42:19.471 text[12734:217314] ?0

2,不同父控件的情況,不同子控件是否有交集

不同父控件,子控件不相交

同樣按上述方法執(zhí)行后,結(jié)果如圖所示.問什么我們看到的紅色View和粉色view還有綠色View都有相交,為什么打印出來的結(jié)果會(huì)不同了.先確定方法肯定是沒問題的,那么問題就出來了,是不是在同一個(gè)坐標(biāo)系中了.怎么解決問題了,后面會(huì)說道.

再看一個(gè)稍微復(fù)雜的例子(這個(gè)圖片有點(diǎn)模糊,圖片丟失了一次,大家見諒):

多張圖片有無交集

這個(gè)是求,紅色View和綠色View有無交集,從圖上可以看出,是有交集的,但是按照上面的方法我們算出來的還是為0,也就是返回的為NO,所以像這種不在同一父控件的的子控件要判斷是否重疊必須進(jìn)行坐標(biāo)系轉(zhuǎn)換.

3,坐標(biāo)系轉(zhuǎn)換的方法

轉(zhuǎn)換坐標(biāo)系的代碼

注意判斷子控件是否相交,最好把子控件的坐標(biāo)原點(diǎn)轉(zhuǎn)到相同的父控件上,這樣就不會(huì)出現(xiàn),看著有交集,計(jì)算無交集的情況了.這里推薦大家把坐標(biāo)系都轉(zhuǎn)到可是主窗口坐標(biāo)系上,這樣是肯定不會(huì)出錯(cuò)的.

4,坐標(biāo)系轉(zhuǎn)換的使用場(chǎng)景

? ? 父子控制器,子控制器在刷新數(shù)據(jù)的情況.只需要刷新一個(gè)子控制器的數(shù)據(jù)的時(shí)候,可以利用交集判斷哪個(gè)子控制器顯示在窗口上來是先效果.

5,結(jié)束語(yǔ)

? ? ? ?這就是本節(jié)想要跟小伙伴們分享的內(nèi)容,有誤之處請(qǐng)大家指出,希望同大家共同進(jìn)步.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容