Jac*_*999 70 objective-c orientation uidevice ios swift
我需要检测设备何时处于纵向方向,以便我可以触发特殊动画.但我不希望我的观点自动旋转.
当设备旋转为纵向时,如何覆盖自动旋转视图?我的应用程序只需要在横向上显示它的视图,但如果我想能够检测旋转到肖像,我似乎还需要支持肖像.
Dav*_*dek 170
在加载应用程序或加载视图时尝试执行以下操作:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
Run Code Online (Sandbox Code Playgroud)
然后添加以下方法:
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
/* start special animation */
break;
case UIDeviceOrientationPortraitUpsideDown:
/* start special animation */
break;
default:
break;
};
}
Run Code Online (Sandbox Code Playgroud)
以上将允许您注册设备的方向更改,而无需启用视图的自动旋转.
在iOS的所有情况下,当您添加一个观察者时,也要在适当的时候删除它(当视图出现/消失时,可能会,但并非总是如此).您只能拥有观察/取消观察代码的"对".如果你不这样做,应用程序将崩溃.选择观察/不观察的位置超出了本质量保证的范围.但是,你必须有一个"unobserve"来匹配上面的"观察"代码.
Sur*_*gch 18
如果你想到这个问题来寻找如何检测方向变化(不一定要禁用旋转),你也应该注意viewWillTransitionToSize,这可以从iOS 8获得.
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)
如果您不需要担心实际的方向:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
// do something
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}
Run Code Online (Sandbox Code Playgroud)
- (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)
如果你不需要担心实际的方向(取自这个答案):
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
// Do view manipulation here.
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51807 次 |
| 最近记录: |