这篇文章主要介绍了Swift 使用 Observe 监测页面滚动的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
Swift 以前是通过addObserver
来实现对某个属性的变化监听,而最新的变化,书写起开更加方便。
observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in
print(change)
}
一定要用属性赋值当前的 observe 结果,没有的话可能会造成 change 不生效。
对 UIScrollView 的滚动监听,我们可以使用UIScrollViewDelegate
extension UIScrollViewDelegate{
func scrollViewDidScroll(scrollView: UIScrollView){
//do something
}
}
这里推荐使用 Observe 比较方便的是可以进行模块的逻辑的拆分,我们只需在自己的组件里面进行监听
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中实现Observable机制
今天给别人讲个Observable的实现和使用场景,结合Observable-Swiftgithub:https://github.com/slazyk/Observable-Swift讲了半天貌似还没有特别明白,故写了个简易的实现,讲述了下Observable属性监控机制。
//: Playground - noun: a place where people can play
import UIKit
import Foundation
// MARK: - Observable
class Observable<T> {
// 定义block结构
typealias Observer = T -> Void
// 申明一个block,用于数据改变的执行
private var observer: Observer?
// 数据发生变更,则通过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 监测页面滚动的文章就介绍到这了,更多相关Swift 使用 Observe 监测页面滚动内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Swift 使用 Observe 监测页面滚动的实现方法


基础教程推荐
- R语言 ggplot2改变柱状图的顺序操作 2022-11-17
- win10下使用virtualbox + vagrant配置ruby开发机环境 2023-07-23
- 浅析ELF转二进制允许把 Binary 文件加载到任意位置 2023-07-06
- Swift初始化器与可选链的使用方法介绍 2023-07-08
- ruby-on-rails-为使用Rails 4,nginx和乘客的用户设置自定义域 2023-09-21
- Ruby3多线程并行Ractor使用方法详解 2023-07-23
- R语言绘制折线图实例分析 2022-11-21
- ruby on rails validates 2023-09-22
- Swift中重写和重载的使用与对比总结 2023-07-05
- R语言-修改(替换)因子变量的元素操作 2022-11-26