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 существуют некоторые изменения/проблемы/ошибки.



и UIScreen теперь интерфейс ориентирован

655   6  

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;
}

методы вращения все еще работают,но существуют и другие вопросы:

Comments

    Ничего не найдено.