前提・実現したいこと
SwiftUI で DragGesture を使用する際に利用可能な『coordinateSpace』の引数について理解したいです。
公式ドキュメントを見ても 「coordinateSpace: .local」 と 「coordinateSpace: .global」 についての記述は一切なく、
コードを色々試して実験してみても、
①、「coordinateSpace: .local」 は gesture.location.y や gesture.translation.height の値が大幅にブレるように変動して一定に変化しない謎が解決できず、
②、 「coordinateSpace: .global」 は一定に変化するもののドラッグ検知(初期)時の初期値が理解できず、
どうしたらいいのかわからない状況です。
※実現したいこと
・「coordinateSpace: .local」 と 「coordinateSpace: .global」 の違い、役割について知りたいです。
・それについて書かれてあるドキュメントやサイトがあれば教えていただきたいです。
・今回自分が理解できない点、①②に関連することで少しでも知識のある方がいらっしゃれば教えてほしいです。
該当のソースコード
import SwiftUI struct bgChart: View { // MARK: - Property var imageName: String var chartHeight: CGFloat = 300 @State var percent: CGFloat // MARK: - Body var body: some View { // MARK: - Chart VStack (spacing: 30) { ZStack (alignment: .bottom) { Capsule() .fill(Color("Color1")) .frame(width: 70, height: chartHeight) .shadow(color: Color("darkShadow"), radius: 4, x: 4, y: 4) .shadow(color: Color("lightShadow"), radius: 4, x: -4, y: -4) Capsule() .fill( LinearGradient(gradient: Gradient(colors: [Color("Color2"), Color("Color3")]), startPoint: .top, endPoint: .bottom) ) .frame(width: 70, height: percent * 3) // DragGesture .gesture( DragGesture(minimumDistance: 0, coordinateSpace: .global) .onChanged({ (value) in percent = (1 - (value.translation.height / chartHeight)) * 100 if percent > 100 { percent = 100 } if percent < 20 { percent = 20 } }) ) //: gesture } //: ZStack Image(systemName: imageName) .font(.system(size: 40)) .frame(width: 50, height: 50) .foregroundColor(Color("IconColor")) .shadow(color: Color("darkShadow"), radius: 4, x: 4, y: 4) .shadow(color: Color("lightShadow"), radius: 4, x: -4, y: -4) } //: VStack } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。