SwiftUI 封裝 UIScrollView 實(shí)現(xiàn)高性能輪播圖掌握updateUIView使用技巧
每當(dāng)依賴(lài)數(shù)據(jù)的某些綁定更新時(shí),Representable就會(huì)更新,因此碧信,updateUIView當(dāng)圖像更改時(shí)垫挨,您需要在update中重建內(nèi)部結(jié)構(gòu)。
本文價(jià)值與收獲
看完本文后诈悍,您將能夠作出下面的界面
基礎(chǔ)知識(shí)
UIScrollView
允許滾動(dòng)和縮放其包含的視圖的視圖祸轮。
class UIScrollView : UIView
使用教程
UIScrollView是包括和在內(nèi)的多個(gè)UIKit類(lèi)的超類(lèi)。UITableViewUITextView
對(duì)象(或簡(jiǎn)單地說(shuō)是滾動(dòng)視圖)的中心概念是它的原點(diǎn)可在內(nèi)容視圖上調(diào)整的視圖侥钳。它將內(nèi)容剪切到其框架上适袜,該框架通常(但不一定)與應(yīng)用程序主窗口的內(nèi)容一致。滾動(dòng)視圖可跟蹤手指的運(yùn)動(dòng)并相應(yīng)地調(diào)整原點(diǎn)舷夺】嘟矗“通過(guò)”滾動(dòng)視圖顯示其內(nèi)容的視圖基于新原點(diǎn)繪制其自身的該部分,該原點(diǎn)固定到內(nèi)容視圖中的偏移量给猾。滾動(dòng)視圖本身不繪制任何圖形疫萤,只顯示垂直和水平滾動(dòng)指示符。滾動(dòng)視圖必須知道內(nèi)容視圖的大小耙册,以便知道何時(shí)停止?jié)L動(dòng)给僵。默認(rèn)情況下,當(dāng)滾動(dòng)超出內(nèi)容范圍時(shí)详拙,它將“彈回”帝际。
管理滾動(dòng)視圖中顯示的內(nèi)容繪圖的對(duì)象應(yīng)平鋪內(nèi)容的子視圖,以使任何視圖都不會(huì)超出屏幕的大小饶辙。當(dāng)用戶(hù)在滾動(dòng)視圖中滾動(dòng)時(shí)蹲诀,此對(duì)象應(yīng)根據(jù)需要添加和刪除子視圖。
因?yàn)闈L動(dòng)視圖沒(méi)有滾動(dòng)條弃揽,所以它必須知道觸摸是否表示要滾動(dòng)的意圖與跟蹤內(nèi)容中子視圖的意圖脯爪。為了進(jìn)行此確定,它通過(guò)啟動(dòng)計(jì)時(shí)器來(lái)暫時(shí)攔截觸地事件矿微,并在計(jì)時(shí)器啟動(dòng)之前查看觸摸的手指是否有任何移動(dòng)痕慢。如果計(jì)時(shí)器觸發(fā)時(shí)位置沒(méi)有明顯變化,則滾動(dòng)視圖會(huì)將跟蹤事件發(fā)送到內(nèi)容視圖的觸摸子視圖涌矢。如果用戶(hù)然后在計(jì)時(shí)器過(guò)去之前將其手指拖到足夠遠(yuǎn)掖举,則滾動(dòng)視圖將取消子視圖中的任何跟蹤,并自行執(zhí)行滾動(dòng)娜庇。子類(lèi)可以覆蓋塔次,和方法(其由滾動(dòng)視圖調(diào)用)來(lái)影響滾動(dòng)視圖手柄如何滾動(dòng)手勢(shì)方篮。
滾動(dòng)視圖還可以處理內(nèi)容的縮放和平移。當(dāng)用戶(hù)做出放大或縮小手勢(shì)時(shí)励负,滾動(dòng)視圖會(huì)調(diào)整內(nèi)容的偏移量和比例藕溅。當(dāng)手勢(shì)結(jié)束時(shí),管理內(nèi)容視圖的對(duì)象應(yīng)根據(jù)需要更新內(nèi)容的子視圖继榆。(請(qǐng)注意巾表,手勢(shì)可能會(huì)結(jié)束,而手指可能仍會(huì)放下略吨。)在進(jìn)行手勢(shì)時(shí)攒发,滾動(dòng)視圖不會(huì)將任何跟蹤調(diào)用發(fā)送到子視圖。