< How to hide the home indicator and other system UI | How to dynamically change between VStack and HStack > |
Updated for Xcode 14.2
New in iOS 16
SwiftUI’s defersSystemGestures()
modifier lets us request that our gestures take precedence over the system’s own built-in gestures. This is important in various places, such as games where the user might be swiping around a lot, or when you place your own gestures at the screen edges.
As an example, you might be using a drag gesture to let the user control the value of some input – perhaps they are getting fine control over a color, maybe they are working with audio such as a theremin, or maybe it’s a game where they are swiping to move their character around. Here we could use defersSystemGestures()
like this:
struct ContentView: View {
@State private var input = 0.0
var body: some View {
Text("Current value: \(input)")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.contentShape(Rectangle())
.gesture(
DragGesture().onChanged { value in
input = value.location.y - value.startLocation.y
}
)
.defersSystemGestures(on: .vertical)
}
}
Download this as an Xcode project
On iOS that does three distinct things:
SPONSORED From March 20th to 26th, you can join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.