質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

393閲覧

ジェスチャーの判定が期待通りでない

quwant

総合スコア5

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/06/07 09:32

編集2021/06/07 09:48

Twitterの様に左部からメニューを表示させたいと考えています。
奥行きを出して重ねるのではなく、左に存在していたViewをスライド表示するイメージです。
下記のサイトを参考にコードを書いたのですが、左側からスワイプしてもメニューが表示されません。
ただ、下側から上にスワイプすると期待通りに左部からメニューが表示されます。
なぜ、左からのスワイプではなく下からのスワイプ判定になっているのでしょうか。

おそらくMainViewが原因なのではないかなと思ってます。

▼ContentView

Swift

1import SwiftUI 2 3struct ContentView: View { 4 5 @State private var xOffset = CGFloat.zero 6 @State private var defaultOffset = CGFloat.zero 7 8 var body: some View { 9 GeometryReader { geometry in 10 ScrollView(.horizontal, showsIndicators: false) { 11 HStack(spacing: 0) { 12 SideMenuView() 13 .frame(width: geometry.size.width * 0.7) 14 Divider() 15 MainView() 16 .frame(width: geometry.size.width) 17 } 18 .onAppear(perform: { 19 self.xOffset = geometry.size.width * -0.7 20 self.defaultOffset = self.xOffset 21 }) 22 .offset(x: self.xOffset) 23 .frame(width: geometry.size.width, alignment: .leading) 24 .animation(.default) 25 .gesture( 26 DragGesture() 27 .onChanged{ value in 28 if (self.xOffset != .zero && value.translation.width > 5) { 29 self.xOffset = self.defaultOffset + value.translation.width 30 } 31 } 32 .onEnded { value in 33 if (value.translation.width > 5) { 34 self.xOffset = .zero 35 } else { 36 self.xOffset = self.defaultOffset 37 } 38 } 39 ) 40 } 41 .edgesIgnoringSafeArea(.all) 42 } 43 } 44} 45 46struct ContentView_Previews: PreviewProvider { 47 static var previews: some View { 48 ContentView() 49 } 50} 51

▼MainView

swift

1import SwiftUI 2 3struct MainView: View { 4 5 @State private var navBarTitle: String = "TOP" 6 @State private var isNewViewShown: Bool = false 7 8 var body: some View { 9 NavigationView(){ 10 TabView(selection: $navBarTitle){ 11 AView().tabItem{ 12 Label("aaa", systemImage: "house") 13 }.tag("aaa") 14 BView().tabItem{ 15 Label("bbb", systemImage: "antenna.radiowaves.left.and.right") 16 }.tag("bbbb") 17 CView().tabItem{ 18 Label("ccc", systemImage: "checkmark.square") 19 }.tag("ccc") 20 DView().tabItem{ 21 Label("ddd", systemImage: "text.bubble") 22 }.tag("ddd") 23 } 24 .navigationBarTitle(Text(self.navBarTitle), displayMode: .inline) 25 .navigationBarItems( 26 leading: 27 Button(action: { 28 print("通知ボタンが押されました。") 29 }, label: { 30 Image(systemName: "bell") 31 .renderingMode(.template) 32 .foregroundColor(.white) 33 }), 34 trailing: 35 Button(action: { 36 print("検索ボタンが押されました。") 37 }, label: { 38 Image(systemName: "magnifyingglass") 39 .renderingMode(.template) 40 .foregroundColor(.white) 41 }) 42 ) 43 .overlay( 44 Button(action: { 45 print("新規投稿ボタンが押されました。") 46 self.isNewPostViewShown = true 47 }, label: { 48 Image(systemName: "plus.circle") 49 .resizable() 50 .frame(width: 40.0, height: 40.0, alignment: .leading) 51 .background(Color.white) 52 .foregroundColor(.gray) 53 .clipShape(Circle()) 54 }) 55 .offset(x: 0, y: -30), alignment: .bottom 56 ) 57 .sheet(isPresented: self.$isNewViewShown){ 58 NewView() 59 } 60 } 61 } 62} 63 64struct MainView_Previews: PreviewProvider { 65 static var previews: some View { 66 MainView() 67 } 68} 69

▼参考サイト
https://d1v1b.com/swiftui/twitter_home_menu

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ContentViewのScrollViewを消したら期待通りに動きました。
なぜだろう?
あと、参考サイトでは動いていたのもなぜだろう?

投稿2021/06/08 09:55

quwant

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問