教程中说的是怎么在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))
网友评论