Swift 使用 Observe 監(jiān)測頁面滾動的實現(xiàn)方法
Swift 以前是通過addObserver來實現(xiàn)對某個屬性的變化監(jiān)聽,而最新的變化,書寫起開更加方便。
observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in
print(change)
}
一定要用屬性賦值當(dāng)前的 observe 結(jié)果,沒有的話可能會造成 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)和使用場景,結(jié)合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結(jié)構(gòu)
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哈哈~
總結(jié)
到此這篇關(guān)于Swift 使用 Observe 監(jiān)測頁面滾動的文章就介紹到這了,更多相關(guān)Swift 使用 Observe 監(jiān)測頁面滾動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
switch實現(xiàn)一個兩數(shù)的運算代碼示例
這篇文章主要介紹了switch實現(xiàn)一個兩數(shù)的運算代碼示例,需要的朋友可以參考下2017-06-06
Swift實現(xiàn)多個TableView側(cè)滑與切換效果
這篇文章主要為大家詳細介紹了Swift實現(xiàn)多個TableView側(cè)滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
SpringBoot3.0集成Redis緩存的實現(xiàn)示例
緩存就是一個存儲器,常用 Redis作為緩存數(shù)據(jù)庫,本文主要介紹了SpringBoot3.0集成Redis緩存的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-03-03

