SwiftUI 高级用法之如何捕获截取事件实现隐藏收起展开PreferenceKey(教程含源码)

实战需求

SwiftUI 高级用法之如何捕获截取事件实现隐藏收起展开

本文价值与收获

看完本文后,您将能够作出下面的界面

截屏2021-01-13 上午9.23.52.png

基础知识

SwiftUI提供了PreferenceKeys的功能,这是SwiftUI通过视图树传递信息的方式。PreferenceKey 是一种通用协议,需要一个静态函数和一个静态默认值:

struct SizePreferenceKey: PreferenceKey {
  static var defaultValue: CGSize = .zero
  static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}
  • defaultValue 是当视图对此键没有显式值时使用的值
  • reduce(value:nextValue:) 将树中找到的键值与新的键值相结合

PreferenceKey示例,存储孩子的实际尺寸:

var body: some View {
  childView
    .background(
      GeometryReader { geometryProxy in
        Color.clear
          .preference(key: SizePreferenceKey.self, value: geometryProxy.size)
      }
    )
}

SwiftUI提供了View扩展名,onPreferenceChange(_:perform:)使我们可以指定所需的键,以及在首选项更改时执行的代码块:

var body: some View {
  childView
    .background(
      GeometryReader { geometryProxy in
        Color.clear
          .preference(key: SizePreferenceKey.self, value: geometryProxy.size)
      }
    )
    .onPreferenceChange(SizePreferenceKey.self) { newSize in
      print("The new child size is: \(newSize)")
    }
}

实战代码

还有 59% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
支付 ¥9.90 继续阅读

推荐阅读更多精彩内容