Book Image

An iOS Developer's Guide to SwiftUI

By : Michele Fadda
Book Image

An iOS Developer's Guide to SwiftUI

By: Michele Fadda

Overview of this book

– SwiftUI transforms Apple Platform app development with intuitive Swift code for seamless UI design. – Explore SwiftUI's declarative programming: define what the app should look like and do, while the OS handles the heavy lifting. – Hands-on approach covers SwiftUI fundamentals and often-omitted parts in introductory guides. – Progress from creating views and modifiers to intricate, responsive UIs and advanced techniques for complex apps. – Focus on new features in asynchronous programming and architecture patterns for efficient, modern app design. – Learn UIKit and SwiftUI integration, plus how to run tests for SwiftUI applications. – Gain confidence to harness SwiftUI's full potential for building professional-grade apps across Apple devices.
Table of Contents (25 chapters)
Free Chapter
1
Part 1: Simple Views
5
Part 2: Scrollable Views
8
Part 3: SwiftUI Navigation
11
Part 4: Graphics and Animation
14
Part 5: App Architecture
17
Part 6: Beyond Basics

Reacting to device rotation

SwiftUI does not have a built-in way of detecting device rotation and displaying different information depending on device orientation. However, it is possible to subscribe to the notification for the event using UIDevice.orientationDidChangeNotification, and to decode the device orientation when we receive the system notification.

We create our own view modifier that listens to this event and have it call a function when this happens. As a parameter to this function, we will include the UIDeviceOrientation value, because we need to be able to react differently to different orientations. In our example, we will decode all possible values for the orientation and visualize a different text in each case.

The following example illustrates this technique:

import SwiftUI
struct RotationModifier: ViewModifier {
    let action: (UIDeviceOrientation) -> Void
    func body(content: Content) -> some View {
 ...