Как использовать self.offset для перетаскивания sidemenu в swiftui? - PullRequest
1 голос
/ 06 апреля 2020

У меня есть следующий код для моего бокового меню, но я не могу установить self.offset (x :, y :), так как он говорит, что результат не используется? Как я могу заставить это работать, поскольку я хочу, чтобы меню было перетаскиваемым влево.

    @Binding var showMenu: Bool

    var body: some View {
        HStack {
            GeometryReader { geometry in

            MenuView()
                .frame(width: 240, alignment: .leading)
                .background(Color.white)
                .offset(x: self.showMenu ? 0 : -geometry.size.width)
                .animation(.spring())
                .transition(.move(edge: .leading))
                .zIndex(4)
                .gesture(DragGesture()
                    .onChanged { val in
                        self.offset(x: val.translation.width)
                    }
                    .onEnded { val in
                        self.offset(x: .zero)
                    }
                )
            }
        }
    }

1 Ответ

0 голосов
/ 06 апреля 2020

Поскольку код не тестируемый, так что просто идея - неуклюжая. Вы не можете использовать self структуры представления, вместо этого изменить какое-либо состояние и использовать это значение состояния в соответствующих модификаторах, как показано ниже

@Binding var showMenu: Bool

@State private var xOffset: CGFloat = .zero

var body: some View {
    HStack {
        GeometryReader { geometry in

        MenuView()
            .frame(width: 240, alignment: .leading)
            .background(Color.white)
            .offset(x: self.showMenu ? xOffset : -geometry.size.width)
            .animation(.spring())
            .transition(.move(edge: .leading))
            .zIndex(4)
            .gesture(DragGesture()
                .onChanged { val in
                    self.xOffset = val.translation.width
                }
                .onEnded { val in
                    self.xOffset = .zero
                }
            )
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...