不推荐使用旋转方法,相当于'didRotateFromInterfaceOrientation'?

str*_*nge 133 iphone objective-c ios ios8

我正在尝试实现viewWillTransitionToSizeiOS 8中引入的新方法(所有其他旋转方法已被弃用).我想知道现在的等价物didRotateFromInterfaceOrientation是什么,因为我们需要执行许多清理任务,我无法看到我们可以指定的块,UIViewControllerTransitionCoordinator以便在"转换"为新的时调用大小完成.谢谢.

str*_*nge 247

好的,发现它,只需要使用animateAlongsideTransition:completion:传递的方法UIViewControllerTransitionCoordinator.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{   
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
        UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
        // do whatever
    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
    { 

    }];

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
Run Code Online (Sandbox Code Playgroud)

  • 在iOS 9中不推荐使用statusbarorientation.还有什么选项? (3认同)
  • 是的,它会的.这就是我所做的:` - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator {[coordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context){UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation] ; //做任何事情}完成:^(id <UIViewControllerTransitionCoordinatorContext> context){}]; [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; }` (2认同)

Dog*_*fee 69

Swift版的答案很奇怪

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    coordinator.animateAlongsideTransition({ (UIViewControllerTransitionCoordinatorContext) -> Void in

        let orient = UIApplication.sharedApplication().statusBarOrientation

        switch orient {
        case .Portrait:
            println("Portrait")
            // Do something
        default:
            println("Anything But Portrait")
            // Do something else
        }

        }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
            println("rotation completed")
    })

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*hov 10

iOS 10.3和Swift 3

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {

        coordinator.animate(alongsideTransition: { (_) in
            let orient = newCollection.verticalSizeClass

            switch orient {
            case .compact:
                print("Lanscape")///Excluding iPads!!!

            default:
                print("Portrait")
            }
        }, completion: { _ in
            print("rotation completed")
        })

        super.willTransition(to: newCollection, with: coordinator)
    }
Run Code Online (Sandbox Code Playgroud)


j_g*_*fer 7

Swift 3中接受的答案:

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animate(alongsideTransition: { (_) in
        let orient = UIApplication.shared.statusBarOrientation

        switch orient {
        case .portrait:
            print("Portrait")
        // Do something
        default:
            print("Anything But Portrait")
            // Do something else
        }
    }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
      print("rotation completed")
    })

    super.willTransition(to: newCollection, with: coordinator)
}
Run Code Online (Sandbox Code Playgroud)

这对我来说可以


NYC*_*eer 5

既然问题是:什么等于 didRotateFromInterfaceOrientation

我以为我会提供以下代码:

@implementation ViewController
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular) {
        NSLog(@"User has rotated to landscape");
    } else if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) {
        NSLog(@"User has rotated to portrait");
    }
}
@end
Run Code Online (Sandbox Code Playgroud)

我正在模拟器中的iPhone上进行测试,但是如果我使用iPad进行测试,则不会运行我的打印语句,因为traitsCollection不会更改。

这很奇怪,因为这正是Apple的建议

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];
    if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
        || self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
        // your custom implementation here
    }
}
Run Code Online (Sandbox Code Playgroud)