iOS 8 методы вращения устаревание-обратная совместимость
в iOS 8 методы вращения интерфейса устаревший. Это включает в себя:
willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:willAnimateRotationToInterfaceOrientation:duration:
методы замены включают в себя:
willTransitionToTraitCollection:withTransitionCoordinator:viewWillTransitionToSize:withTransitionCoordinator:
если новые методы вращения не реализованы, а проект скомпилирован с помощью iOS 8 SDK, контроллеры представления-будут не получат звонит - к устаревшим методам вращения.
мой интерес заключается в следующем: что происходит с приложением уже в AppStore, построенном с помощью iOS 7 SDK? Будут ли устаревшие методы вращения по-прежнему вызываться на устройстве iOS 8 или нет?
EDIT:
методы вращения по-прежнему вызываются, но в iOS 8 существуют некоторые изменения/проблемы/ошибки.
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.
для меня здесь мы вращаем "вещи вручную" с некоторыми вычислениями и файлом 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; }
методы вращения все еще работают,но существуют и другие вопросы:
- С видами, добавленными в windows:проблема вращения с ios 8 для просмотра, которые добавляются в windows
Comments