Я наконец нашел здравый ответ на это. Больше не надо возиться с "анимацией вращения" и прочим!
Ключ в том, чтобы использовать UIViewController для слоя предварительного просмотра (не вращающийся вид) и другой для фактического интерфейса. Настройте параметры поворота для обоих, используя shouldAutorotateToInterfaceOrientation: (код приведен в ответах выше):
- Контроллер предварительного просмотра должен быть установлен, чтобы не вращаться
- Контроллер интерфейса должен быть повернут в нужную вам ориентацию
Важным моментом является разделение ваших видов путем добавления их непосредственно в окно. Я делаю это в AppDelegate:
[self.window addSubview:previewViewController.view];
[self.window addSubview:interfaceViewController.view];
self.window.rootViewController = interfaceViewController;
[self.window makeKeyAndVisible];
Это помещает предварительный просмотр видео в фоновом режиме, а затем добавляет вид интерфейса поверх него. Интерфейс можно автоматически поворачивать, не влияя на предварительный просмотр.
Следует отметить одну важную вещь: фон вашего интерфейса должен быть прозрачным, в противном случае он блокирует предварительный просмотр.