ご覧いただきありがとうございます。
背景の前面にVStack内の要素を描画したいのですが、画像1のようにぼやけてしまいます。
仮にTextBackgroundViewのColorを青に変更してみると、画像2のようになってしまい、Text("score: (viewModel.score)")
の部分すらうまく表示できない状態です。
やりたいことは、画像3のビューをそのまま背景の前面に表示することです。
自分の力のみではうまく解決するのが難しそうだったので質問させていただきました。
どうかお力添えいただきたきたいです。よろしくお願いします。
以下ソースコードと画像になります。
ContentView
1import SwiftUI 2 3struct ContentView: View { 4 @ObservedObject var viewModel = ScoreViewModel() 5 var body: some View { 6 ZStack { 7 Background() 8 VStack(alignment: .leading) { 9 HStack { 10 Image("line") 11 .resizable() 12 .frame(width: 25, height: 25) 13 Text("LINE") 14 .foregroundColor(.gray) 15 Spacer() 16 Text("now") 17 .foregroundColor(.gray) 18 .font(.system(size: 15)) 19 } 20 Text("score: (viewModel.score)") 21 .lineLimit(10) 22 } 23 .padding() 24 .background(TextBackgroundView()) 25 } 26 } 27} 28 29class ScoreViewModel: ObservableObject { 30 @Published var score = 0 31} 32 33struct TextBackgroundView: View { 34 var color: Color = Color.gray.opacity(0.05) 35 var body: some View { 36 GeometryReader { geometry in 37 ZStack { 38 Path { path in 39 let w = geometry.size.width 40 let h = geometry.size.height 41 path.move(to: CGPoint(x: 0, y: 0)) 42 path.addLine(to: CGPoint(x: 0, y: h)) 43 path.addLine(to: CGPoint(x: w, y: h)) 44 path.addLine(to: CGPoint(x: w, y: h)) 45 path.addLine(to: CGPoint(x: w, y: 0)) 46 path.addLine(to: CGPoint(x: 0, y: 0)) 47 } 48 .fill(self.color) 49 .cornerRadius(12) 50 .frame(width: UIScreen.screenWidth * (97/100)) 51 } 52 } 53 } 54} 55 56extension UIScreen { 57 static let screenWidth = UIScreen.main.bounds.size.width 58 static let screenHeight = UIScreen.main.bounds.size.height 59 static let screenSize = UIScreen.main.bounds.size 60} 61
Background
1import SwiftUI 2 3struct Background: View { 4 var body: some View { 5 ZStack { 6 Image("background") 7 .blur(radius: 15) 8 Color.black 9 .opacity(0.7) 10 } 11 } 12}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。