在項(xiàng)目中看到 setNeedDisplay 這個(gè)方法的使用,從而想起了其他 UIView 的布局的其他方法。從而記錄下。
在工程中是在繪制手勢(shì)功能的 View 中看到可 setNeedDisplay 方法。查看資料了解到,setNeedDisplay 是異步執(zhí)行的。同時(shí)調(diào)用這個(gè)方法會(huì)自動(dòng)執(zhí)行 drawRect 方法,調(diào)用 drawRect 方法就可以使用?UIBezierPath 和?CGContextRef 對(duì)象來(lái)進(jìn)行一系列操作了。在工程中就是在 drawRect 中進(jìn)行手動(dòng)滑動(dòng)畫線的功能的實(shí)現(xiàn)。
layoutSubviews 也會(huì)在一些操作后會(huì)自動(dòng)調(diào)用。
1.addSubview 會(huì)觸發(fā)
2.設(shè)置 view 的 frame 會(huì)觸發(fā),重新設(shè)置的 frame 和原本的值發(fā)生變化
3.滾動(dòng)一個(gè) UIScrollView 會(huì)觸發(fā)
4.橫豎屏切換時(shí),會(huì)觸發(fā)父UIView 上的 layoutSubviews
layuotIfNeed 也是異步執(zhí)行的, 這個(gè)方法經(jīng)常會(huì)用,就是根據(jù)數(shù)據(jù)來(lái)更新 View 的 frame,這時(shí)就需要調(diào)用次方法來(lái)手動(dòng)刷新 View 的布局。調(diào)用 layoutIfNeed 強(qiáng)制立即刷新 layout。
有時(shí)當(dāng)你在改變一個(gè) View 的某個(gè)約束后,在 [UIView animateWithDuration:] 方法中調(diào)用 layoutIfNeed 不管是哪一個(gè) View 的約束改變了它都會(huì)以動(dòng)畫的形式過(guò)度到重新約束的位置。改變了某個(gè) View 的約束,但不想以動(dòng)畫的形式則在動(dòng)畫方法之前調(diào)用該方法。
setNeedsLayout 是標(biāo)記某個(gè) View 需要更新 layout ,不會(huì)立即更新。
參考鏈接: