教程中說的是怎么在SwiftUI中使用BlurView, 因為SwiftUI暫時不支持BlurView,所以使用到了UIViewRepresentable來做橋接,所以關(guān)注重點是怎么將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
//常規(guī)初始化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 設(shè)置與view 等寬高
blurView.widthAnchor.constraint(equalTo: view.widthAnchor),
blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
//也可這樣可以直接指定寬/高
// blurView.widthAnchor.constraint(equalToConstant: <#T##CGFloat#>)
])
return view
}
//據(jù)說是用來完善動畫相關(guān)的部分
func updateUIView(_ uiView: UIView, context: Context) {
}
}
使用的時候就把BlurView當做普通的View來用
VStack{
...
}
.background(BlurView(style: .systemMaterial))