我有一个不使用自动布局的UIView,并且根据其在主视图中X和Y坐标的百分比显示了一些组件。
以前,我会运行一个函数来更新它们在didRotateFromInterfaceOrientation中的位置,但是我看到现在iOS8中已弃用此功能。
我看过viewWillTransitionToSize,但结果很奇怪,而且似乎没有viewDidtransitionToSize函数。
设备旋转后,是否有一种简便的方法(在Swift中)运行函数?
Answers:
该viewWillTransitionToSize
委托方法被调用了UIViewControllerTransitionCoordinator
符合对象。协议声明的方法是animateAlongsideTransition(_:animation, completion:)
。您可以使用它来使代码在转换完成后执行。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: nil) { _ in
// Your code here
}
}
上面的答案https://stackoverflow.com/a/26944087/6583492绝对正确,这要归功于Acey和Moonwalkr。但是对于迅速的3.0它看起来像下面
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: nil) { _ in
// Your code here
}
}
虽然这里没有要求Objective C版本:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// change any properties on your views
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if( UIDeviceOrientationIsPortrait(orientation) ) {
NSLog(@"portrait");
} else {
NSLog(@"landscape");
}
}];
}
super.viewWillTransitionToSize:
先打电话吗?