iOS drawRect、initWithFrame、init、setFrame、layoutSubViews調(diào)用時機問題

前言
最近在研究關(guān)于Quart2D方面的知識,通過在drawRect方法內(nèi)可以對一個視圖進(jìn)行繪制并呈現(xiàn)出我們所想要的圖形,在drawRect方法內(nèi)一般都是通過rect的傳參來確定我們的繪制區(qū)域,但在現(xiàn)在的開發(fā)過程中,基于fram來確定視圖的位置的方式已經(jīng)很少使用,大都使用mansory和AutoLayout來確定視圖的fram,所以在自定一個view的時候需要拿到視圖的準(zhǔn)確的fram來進(jìn)行繪制,當(dāng)然這也就涉及到了真實的fram到底在哪里可以準(zhǔn)確的拿到的問題

好了,進(jìn)入正題

  • 方式1 通過initwithFrame方式創(chuàng)建視圖


    111.png
222.png

通過initWithFrame方式創(chuàng)建的視圖的調(diào)用方式是
1 : setFrame
2:initWithFrame
3:layoutSubviews
4:drawRect

  • 方式2 通過alloc init方式創(chuàng)建視圖
465.png
3333.png

通過alloc init方式創(chuàng)建的調(diào)用方式是
1 setFrame
2 init
3 應(yīng)為我在外面設(shè)置了fram所以這里再次調(diào)用setFrame
4 layoutSubviews
5 drawRect

結(jié)語
如果使用了AutoLayout或者mansory等 ,主動調(diào)用updateConstraintsIfNeeded 獲取的frame是不真實的,如果需要得到自定義的view的frame可以在layoutSubViews里面獲取到,如果需要得到UIController內(nèi)的view的frame 可以在viewDidLayoutSubviews方法中遍歷self.View的subViews獲取到view的真實frame,作者這里是想在drawRect方法中繪制視圖,所以將一個UIView的創(chuàng)建和調(diào)用API的順序理了一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容