Ric*_*ard 60 rotation ios swift
我有一个不使用自动布局的UIView,并且根据主视图中X和Y坐标的百分比显示一些组件.
以前我会运行一个函数来更新他们在didRotateFromInterfaceOrientation中的位置,但是我发现这在iOS8中已被弃用了.
我看了一下viewWillTransitionToSize,但它给出了奇怪的结果,并且似乎没有viewDidtransitionToSize函数.
有没有一种简单的方法(在Swift中)在设备旋转后运行一个函数?
Ace*_*cey 151
该viewWillTransitionToSize委托方法被调用了UIViewControllerTransitionCoordinator符合对象.协议声明的方法是animateAlongsideTransition(_:animation, completion:).您可以使用它在转换完成后执行代码.
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
coordinator.animateAlongsideTransition(nil, completion: {
_ in
// Your code here
})
}
Run Code Online (Sandbox Code Playgroud)
dax*_*axh 26
以上回答/sf/answers/1886086121/是完全正确的,感谢Acey和Moonwalkr.但对于swift 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
}
}
Run Code Online (Sandbox Code Playgroud)
Oli*_*nge 14
虽然这里没有要求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");
}
}];
}
Run Code Online (Sandbox Code Playgroud)