ContentView.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | // // ContentView.swift // Test // // Created by Cairocoders // import SwiftUI struct DeviceRotationViewModifier: ViewModifier { let action: (UIDeviceOrientation) -> Void func body(content: Content) -> some View { content .onAppear() .onReceive(NotificationCenter. default .publisher( for : UIDevice.orientationDidChangeNotification)) { _ in action(UIDevice.current.orientation) } } } extension View { func onRotate(perform action: @escaping (UIDeviceOrientation) -> Void) -> some View { self.modifier(DeviceRotationViewModifier(action: action)) } } struct ContentView: View { @State private var orientation = UIDeviceOrientation.unknown var body: some View { Group { if orientation.isPortrait { Text( "Portrait" ) } else if orientation.isLandscape { Text( "Landscape" ) } else if orientation.isFlat { Text( "Flat" ) } else { Text( "Unknown" ) } } .onRotate { newOrientation in orientation = newOrientation } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } |