Swift 使用 Observe 監(jiān)測頁面滾動的實現(xiàn)方法
Swift 以前是通過addObserver
來實現(xiàn)對某個屬性的變化監(jiān)聽,而最新的變化,書寫起開更加方便。
observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in print(change) }
一定要用屬性賦值當前的 observe 結果,沒有的話可能會造成 change 不生效。
對 UIScrollView 的滾動監(jiān)聽,我們可以使用UIScrollViewDelegate
extension UIScrollViewDelegate{ func scrollViewDidScroll(scrollView: UIScrollView){ //do something } }
這里推薦使用 Observe 比較方便的是可以進行模塊的邏輯的拆分,我們只需在自己的組件里面進行監(jiān)聽
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中實現(xiàn)Observable機制
今天給別人講個Observable的實現(xiàn)和使用場景,結合Observable-Swiftgithub:https://github.com/slazyk/Observable-Swift講了半天貌似還沒有特別明白,故寫了個簡易的實現(xiàn),講述了下Observable屬性監(jiān)控機制。
//: Playground - noun: a place where people can play import UIKit import Foundation // MARK: - Observable class Observable<T> { // 定義block結構 typealias Observer = T -> Void // 申明一個block,用于數(shù)據(jù)改變的執(zhí)行 private var observer: Observer? // 數(shù)據(jù)發(fā)生變更,則通過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哈哈~
總結
到此這篇關于Swift 使用 Observe 監(jiān)測頁面滾動的文章就介紹到這了,更多相關Swift 使用 Observe 監(jiān)測頁面滾動內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Swift并發(fā)系統(tǒng)并行運行多個任務使用詳解
這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運行多個任務使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06Swift 3.0將UILabel數(shù)字顏色設置為紅色的方法
這篇文章主要介紹了關于在Swift中將UILabel數(shù)字顏色設置為紅色的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03