Я решил это после небольшого количества экспериментов.
В каждом из моих контроллеров представления я добавил дополнительный UIView. Он рассчитан на весь физический экран. Это всегда последний добавленный вид, поэтому он охватывает все остальные детали под ним. Его цвет устанавливается таким же цветом, как и существующий цвет фона контроллера представления. Я обращаюсь к этому представлению как к «ovrView» в коде ниже.
При входе в контроллер представления в viewWillAppear я добавил следующий код:
ovrView.alpha = 1.0f;
[UIView animateWithDuration: 0.2f
animations: ^{ ovrView.alpha = 0.0f; }];
Это приводит к тому, что каждый раз, когда я вхожу в контроллер представления, пользователю дается пустое фоновое цветное поле, и это наложение исчезает через 0,2 секунды, раскрывая детали ниже.
В каждой процедуре viewWillTransitionToSize каждого контроллера я добавил следующий код:
- (void) viewWillTransitionToSize: (CGSize) newSize
withTransitionCoordinator: (id) coordinator
{
//...this code executes before the rotation.
[super viewWillTransitionToSize: newSize
withTransitionCoordinator: coordinator];
ovrView.alpha = 1.0f;
void (^midRotationBlk)(id) = ^(id context)
{
//...this code executes during the rotation.
[self updateViewConstraints];
};
void (^endRotationBlk)(id) = ^(id context)
{
//...this code executes after the rotation.
[UIView animateWithDuration: 0.4f
animations: ^{ ovrView.alpha = 0.0f; }];
};
[coordinator animateAlongsideTransition: midRotationBlk
completion: endRotationBlk];
}
Этот код приводит к тому, что экран переходит на пустой фоновый цвет непосредственно перед началом вращения, а затем очищается, чтобы показать детали после поворота сразу после окончания вращения.
Я попытался добавить в ovrView постепенное увеличение, поскольку вращение началось, вместо того, чтобы сразу установить альфа в 1.0f. Но я всегда мог видеть вращение, начинающееся при появлении анимированной анимации, поэтому я отказался от него.
Ничего из этого не требуется для правильного функционирования приложения, но оно создает эффект, который мне нравится, когда пользователь перемещается от одного контроллера представления к другому и по мере вращения устройства.