Исправлена ​​ориентация только одного взгляда в Swiftui на портретIOS

Программируем под IOS
Ответить
Anonymous
 Исправлена ​​ориентация только одного взгляда в Swiftui на портрет

Сообщение Anonymous »

Я видел много -много ответов на это, но пока не нашел удовлетворительного. Я нацелена на iOS 17+ и хочу, чтобы один из подписания (для предварительного просмотра камеры) заблокирована для портретной ориентации, позволяя всем остальным свободно вращаться. Пользовательским представлением для предварительного просмотра камеры является uiviewrepresentable , который я хочу быть заблокированной для портретной ориентации. Для записи я видел следующие подходы: < /p>
  • Реализация AppDelegate < /code>, < /p>

    Код: Выделить всё

     class AppDelegate: NSObject, UIApplicationDelegate {
    
    static var orientationLock = UIInterfaceOrientationMask.portrait //By default you want all your views to rotate freely
    
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return AppDelegate.orientationLock
    }
    < /code>
    } < /p>
    < /li>
    < /ol>
    Но оно устанавливает все приложение на ориентацию портрета, чем просто представление. < /p>
    
      Методы ориентации на основе на основе uidevice Методы установки: больше не работают, и это неясно, как их можно использовать для блокировки ориентации из одного представления. Вид сначала вращается, а затем не работает, и в процессе вращается вся иерархия представления, а не только рассматриваемое представление. < /P>
    SampleBufferView(viewModel: camera, sampleBuffer: latestSample)
    .aspectRatio(verticalSizeClass == .regular ? 9.0/16.0 : 16.0/9.0, contentMode: .fit)
    .onAppear {
    if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
    scene.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait)) { error in
    // Handle denial of request.
    }
    }
    }
    .onGeometryChange(for: CGSize.self, of: { proxy in
    proxy.size
    }, action: { newValue in
    requestOrientations(.portrait)
    })
    
    private func requestOrientations(_ orientations: UIInterfaceOrientationMask) {
    if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
    scene.requestGeometryUpdate(.iOS(interfaceOrientations: orientations)) { error in
    // Handle denial of request.
    }
    }
    
    }


Подробнее здесь: https://stackoverflow.com/questions/794 ... o-portrait
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»