swiftuiのgeometryreaderについての質問です。
インスタのストーリーのような複数の画像が横に並びそれをスクロールしていく画面を作っています。
スクロール中の複数の画像から一つを選択した場合の処理は.onTapGestureなどを使えば書けるのですが、その画像が特定位置に来た時に処理を走らせる方法が分かりません。
具体的にはgeometryで取得したx座標がある特定の位置に達した時に処理を走らせたいです。
以下にコードを記載します。
geometry.frame(in: .global).origin.xの値が特定位置に達した時に、17行目のonTapGestureようにfocusnumberをその画像のindexに書き換えるという処理をしたいです。
geometry.frame(in: .global).origin.xでそれぞれの画像の座標がリアルタイムで取得できるのは20行目で確認済みです。
swiftui
1@State var focusNumber:Int = 1 2 3ScrollView(.horizontal, showsIndicators: false) {//横スクロール、選手写真 4 HStack(alignment: .center) { 5 ForEach(0..<image.count, id: \.self) { index in 6 GeometryReader { geometry in 7 Image(image[index]) 8 .resizable() 9 .scaledToFit()//縦横比維持 10 .overlay(RoundedRectangle(cornerRadius: 40)//写真の縁取り、枠を円にする 11 .stroke(colorChange[String(teamnumber[index])]!, lineWidth: 4))//チーム毎に色を変える 12 .frame(width: 80, height: 80) 13 .clipShape(Circle()) 14 .scaleEffect(max(1,-abs(self.magnification / self.halfScreenWidth * (geometry.frame(in: .global).midX - self.halfScreenWidth)) + self.magnification))//サイズの変更 15 .shadow(radius:10) 16 .onTapGesture{ 17 focusNumber = index 18 } 19 20 Text("x : \(geometry.frame(in: .global).origin.x), y : \(geometry.frame(in: .global).origin.y)") 21 22 23 }//geometry 24 .frame(width: 80, height: self.magnification * 80) 25 .padding() 26 }//foreach 27 }//hstack 28 }//横スクロールビュー 29 30
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/01/31 18:10