美文网首页SwiftUI
SwiftUI 学习笔记-04 在SwiftUI 中使用 UIV

SwiftUI 学习笔记-04 在SwiftUI 中使用 UIV

作者: _wzz | 来源:发表于2021-05-20 15:57 被阅读0次

    教程中说的是怎么在SwiftUI中使用BlurView, 因为SwiftUI暂时不支持BlurView,所以使用到了UIViewRepresentable来做桥接,所以关注重点是怎么将UIView桥接至SwiftUI。
    理解为将BlurView先放到容器View中,指定BlurView 与view等宽,view又是自动布局,然后再通过UIViewRepresentable桥接SwiftUI
    代码如下:

    import SwiftUI
    
    struct BlurView: UIViewRepresentable {
        var style: UIBlurEffect.Style
        //指定桥接类型
        typealias UIViewType = UIView
        //指定类型之后会提示自动补全下面两个方法
    
        //初始化UIView的方法
        func makeUIView(context: Context) -> UIView {
            //下面要使用自动布局指定大小,所以初始化为0
            let view = UIView(frame: CGRect.zero)
            //指定容器View的背景色为 clear
            view.backgroundColor = .clear
            
            //常规初始化BlurView的操作
            let blurEffect = UIBlurEffect(style: style)
            let blurView = UIVisualEffectView(effect: blurEffect)
            blurView.translatesAutoresizingMaskIntoConstraints = false
            //将BlurView插入到view的最底层
            view.insertSubview(blurView, at: 0)
            
            //自动布局指定blueView的大小为与View等宽高
            //要注意先后顺序,需先将blurView插入到view中
            NSLayoutConstraint.activate([
                //width & height 这里是用autolayout 设置与view 等宽高
                blurView.widthAnchor.constraint(equalTo: view.widthAnchor),
                blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
                //也可这样可以直接指定宽/高
    //            blurView.widthAnchor.constraint(equalToConstant: <#T##CGFloat#>)
            ])
            return view
        }
        
        //据说是用来完善动画相关的部分
        func updateUIView(_ uiView: UIView, context: Context) {
            
        }
    }
    

    使用的时候就把BlurView当做普通的View来用

    VStack{
              ...
    }
    .background(BlurView(style: .systemMaterial))
    

    相关文章

      网友评论

        本文标题:SwiftUI 学习笔记-04 在SwiftUI 中使用 UIV

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