前言
最近在研究關(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
通過initWithFrame方式創(chuàng)建的視圖的調(diào)用方式是
1 : setFrame
2:initWithFrame
3:layoutSubviews
4:drawRect
- 方式2 通過alloc init方式創(chuàng)建視圖
通過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的順序理了一下。