Устаревшие методы ротации iOS 8 - обратная совместимость
В iOS 8 методы поворота интерфейса устарели. Это включает:
willRotateToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
willAnimateRotationToInterfaceOrientation:duration:
Методы замены включают в себя:
willTransitionToTraitCollection:withTransitionCoordinator:
viewWillTransitionToSize:withTransitionCoordinator:
Если новые методы ротации не реализованы, а проект компилируется с помощью iOS 8 SDK, контроллеры представления - не будут принимать вызовы - к устаревшим методам ротации.
Меня беспокоит следующее: что происходит с приложением, уже находящимся в AppStore, созданном с iOS 7 SDK? Будут ли устаревшие методы вращения по-прежнему вызываться на устройстве iOS 8 или нет?
РЕДАКТИРОВАТЬ:
Методы ротации все еще называются, но в iOS 8 есть некоторые изменения / проблемы / ошибки.
Также UIScreen
теперь ориентирован на интерфейс
6 ответов
Методы ротации устарели в iOS 8 SDK. Это никак не повлияет на приложения, созданные с помощью iOS 7 SDK, даже на iOS 8 и, возможно, в нескольких будущих версиях iOS.
В качестве примера font
собственностью UIButton
устарела с iOS 3.0 и по-прежнему доступна в iOS 7.0.
У меня просто была эта проблема, и я хотел использовать те же методы, которые я использовал раньше (по крайней мере, сейчас), так что это то, что я сделал.
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
//The device has already rotated, that's why this method is being called.
UIInterfaceOrientation toOrientation = [[UIDevice currentDevice] orientation];
//fixes orientation mismatch (between UIDeviceOrientation and UIInterfaceOrientation)
if (toOrientation == UIInterfaceOrientationLandscapeRight) toOrientation = UIInterfaceOrientationLandscapeLeft;
else if (toOrientation == UIInterfaceOrientationLandscapeLeft) toOrientation = UIInterfaceOrientationLandscapeRight;
UIInterfaceOrientation fromOrientation = [[UIApplication sharedApplication] statusBarOrientation];
[self willRotateToInterfaceOrientation:toOrientation duration:0.0];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[self willAnimateRotationToInterfaceOrientation:toOrientation duration:[context transitionDuration]];
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[self didRotateFromInterfaceOrientation:fromOrientation];
}];
}
Я все еще не уверен, должен ли я использовать это за пределами блока анимации, так как у меня нет продолжительности.
[self willRotateToInterfaceOrientation:toOrientation duration:0.0];
Устаревшие методы ротации, которые вы перечислили, по-прежнему вызываются при запуске приложения на устройствах iOS 8+. Если вы поддерживаете iOS 7, вы можете продолжать использовать их без проблем. Если вы поддерживаете только iOS 8+, было бы разумно использовать не устаревшие методы.
Однако обратите внимание, что если вы реализуете новые методы ротации и устаревшие методы в одном контроллере представления, при запуске на iOS 7 будут вызываться устаревшие методы, а на iOS 8+ будут вызываться только новые методы, которые заменили эти методы. которые устарели.
Например, если вы только реализуете willRotateToInterfaceOrientation
этот метод будет вызываться при запуске на iOS 7 и 8. Если вы добавите viewWillTransitionToSize
, iOS 7 все равно будет звонить willRotateToInterfaceOrientation
но iOS 8 не будет, вместо этого он будет только звонить viewWillTransitionToSize
,
Я бы проверил этот конкретный случай на 100% уверенность, но я не ожидаю никаких проблем. Я бы также рекомендовал вам посмотреть сеанс 216 Building Adaptive Apps with UIKit
с WWDC 2014, чтобы получить больше информации. Похоже, что устаревшие методы не вызываются, поэтому приложение должно быть обновлено для правильной работы с устройствами под управлением iOS 8.
Методы ротации все еще работают, НО существуют другие проблемы:
- с представлениями, добавленными к окнам: проблема вращения с ios 8 для представления, которые добавлены к окнам
Для меня, здесь мы вращаем "вещи вручную" с некоторыми вычислениями и файлом plist, который отслеживает размер заголовков и тому подобное (поэтому, если мы хотим что-то изменить кнопки и т. Д., Мы изменим только этот plist, а не все отдельные xibs), И весь наш код вращения находится внутри willLayoutSubviews
так что все правильно даже на новой iOS8... кроме меня также я видел, что для новой ios8 [[UIScreen mainScreen] bounds].size.width
Теперь верните ширину в соответствии с ориентацией устройства, а не в реальном размере устройства.
Я опубликую это в другой теме:
- (BOOL) isIOS8OrAbove{
float version802 = 1140.109985;
float version8= 1139.100000; // there is no def like NSFoundationVersionNumber_iOS_7_1 for ios 8 yet?
NSLog(@"la version actual es [%f]", NSFoundationVersionNumber);
if (NSFoundationVersionNumber >= version8){
return true;
}
return false;
}