Swift 使用 Observe 監(jiān)測(cè)頁(yè)面滾動(dòng)的實(shí)現(xiàn)方法
Swift 以前是通過(guò)addObserver
來(lái)實(shí)現(xiàn)對(duì)某個(gè)屬性的變化監(jiān)聽(tīng),而最新的變化,書(shū)寫(xiě)起開(kāi)更加方便。
observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in print(change) }
一定要用屬性賦值當(dāng)前的 observe 結(jié)果,沒(méi)有的話可能會(huì)造成 change 不生效。
對(duì) UIScrollView 的滾動(dòng)監(jiān)聽(tīng),我們可以使用UIScrollViewDelegate
extension UIScrollViewDelegate{ func scrollViewDidScroll(scrollView: UIScrollView){ //do something } }
這里推薦使用 Observe 比較方便的是可以進(jìn)行模塊的邏輯的拆分,我們只需在自己的組件里面進(jìn)行監(jiān)聽(tīng)
class ComponetView: UIVIew { private var observation: NSKeyValueObservation? init(targetView: UIView) { observation = targetView.observe(\.contentOffset, options: [.new]) { [weak self] scrollView, change in // handle data contentOffset } } }
附錄:Swift中實(shí)現(xiàn)Observable機(jī)制
今天給別人講個(gè)Observable的實(shí)現(xiàn)和使用場(chǎng)景,結(jié)合Observable-Swiftgithub:https://github.com/slazyk/Observable-Swift講了半天貌似還沒(méi)有特別明白,故寫(xiě)了個(gè)簡(jiǎn)易的實(shí)現(xiàn),講述了下Observable屬性監(jiān)控機(jī)制。
//: Playground - noun: a place where people can play import UIKit import Foundation // MARK: - Observable class Observable<T> { // 定義block結(jié)構(gòu) typealias Observer = T -> Void // 申明一個(gè)block,用于數(shù)據(jù)改變的執(zhí)行 private var observer: Observer? // 數(shù)據(jù)發(fā)生變更,則通過(guò)observer告知 var value: T { didSet { observer?(value) } } init(_ v: T) { value = v } func observe(observer: Observer?) { self.observer = observer observer?(value) } } // MARK: - People struct PeopleModel { let firstName: Observable<String> let lastName: Observable<String> init(firstName: String, lastName: String) { self.firstName = Observable(firstName) self.lastName = Observable(lastName) } } // MARK: - Test // test1 let people = PeopleModel(firstName: "sunny", lastName: "liu") people.firstName.observe { newValue in print("firstName changed: \(newValue)") } people.lastName.observe { print("lastName changed: \($0)") } people.firstName.value = "sunny2" people.lastName.value = "liu2" // test2 class House { let lableHouseName = UILabel() init() { } var people: PeopleModel? { didSet { people?.firstName.observe{ [unowned self] in self.lableHouseName.text = $0 } } } }
這樣貌似容易理解了,O(∩_∩)O哈哈~
總結(jié)
到此這篇關(guān)于Swift 使用 Observe 監(jiān)測(cè)頁(yè)面滾動(dòng)的文章就介紹到這了,更多相關(guān)Swift 使用 Observe 監(jiān)測(cè)頁(yè)面滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
因?yàn)橐粋€(gè)Crash引發(fā)對(duì)Swift構(gòu)造器的思考分析
這篇文章主要給大家介紹了關(guān)于因?yàn)橐粋€(gè)Crash引發(fā)對(duì)Swift構(gòu)造器的思考分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Swift使用編解碼庫(kù)Codable的過(guò)程詳解
Codable 是 Swift 引入的全新的編解碼庫(kù),使開(kāi)發(fā)者更方便的解析JSON 或 plist 文件,支持枚舉、結(jié)構(gòu)體和類,這篇文章主要介紹了Swift使用編解碼庫(kù)Codable,需要的朋友可以參考下2023-09-09Swift語(yǔ)言實(shí)現(xiàn)地圖坐標(biāo)彈跳動(dòng)畫(huà)
這篇文章主要介紹了用Swift語(yǔ)言實(shí)現(xiàn)地圖坐標(biāo)彈跳動(dòng)畫(huà)的方法主要應(yīng)用iOS7來(lái)實(shí)現(xiàn)此功能,需要的朋友可以參考下2015-07-07Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解
這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法
這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03