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 結(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)文章
因為一個Crash引發(fā)對Swift構(gòu)造器的思考分析
這篇文章主要給大家介紹了關(guān)于因為一個Crash引發(fā)對Swift構(gòu)造器的思考分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Swift具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-10-10
Swift并發(fā)系統(tǒng)并行運行多個任務(wù)使用詳解
這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運行多個任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法
這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03

