美文网首页
SwiftUI 高级用法之如何捕获截取事件实现隐藏收起展开Pre

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

作者: iCloudEnd | 来源:发表于2021-01-13 09:26 被阅读0次

    实战需求

    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)")
        }
    }
    

    实战代码

    相关文章

      网友评论

          本文标题:SwiftUI 高级用法之如何捕获截取事件实现隐藏收起展开Pre

          本文链接:https://www.haomeiwen.com/subject/ctxuaktx.html