我可以观察 UIViewController 何时更改 interfaceOrientation 吗?
Posted
技术标签:
【中文标题】我可以观察 UIViewController 何时更改 interfaceOrientation 吗?【英文标题】:Can I observe when a UIViewController changes interfaceOrientation? 【发布时间】:2013-01-17 20:40:46 【问题描述】:如果我有一个指向 UIViewController 的指针,是否可以在它更改 interfaceOrientation 时通知我而不修改控制器的代码?
最好的办法是检测设备方向的变化,然后查看 UIViewController 是否会/已经旋转(d)?
【问题讨论】:
不确定问题是否仍然存在,但您可以使用 objc 方法 swizzling 将您自己的代码添加到UIViewController
的代码中。这应该看起来像用您自己的实现交换-didRotateFromInterfaceOrientation:
,它调用了您的方向更改处理程序方法和对原始实现的调用
@medvedNick 这似乎是合理的。我可以打电话给我的代表,然后调用原始实现。我可能有点担心潜在的副作用。
【参考方案1】:
你可以使用 NSNotificationCenter :
[[NSNotificationCenter defaultCenter] addObserver:self // put here the view controller which has to be notified
selector:@selector(orientationChanged:)
name:@"UIDeviceOrientationDidChangeNotification"
object:nil];
- (void)orientationChanged:(NSNotification *)notification
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
//do stuff
NSLog(@"Orientation changed");
【讨论】:
嗯。我想我不清楚。我想知道 ViewController 而不是设备的明显方向。换句话说,我的对象想要观察视图控制器以查看其方向,这可能与设备的方向不同,并且在设备改变方向时可能不会改变。这个答案是我在问题的第二部分中暗示的一部分。【参考方案2】:您可以在 UIViewController 上使用 willAnimateRotationToInterfaceOrientation:duration:
方法,然后将任何 UIView(或任何其他代码)重新定位为横向或纵向。例如
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
// change positions etc of any UIViews for Landscape
else
// change position etc for Portait
// forward the rotation to any child view controllers if required
[self.rootViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
【讨论】:
不幸的是,这意味着更改 UIViewController 的代码。这里我只有一个指向它的指针,想观察它的行为。我真正想做的是在“interfaceOrientation”返回不同的值时得到通知。 注意:这在 ios 8 中已被弃用。***.com/questions/25238620/…以上是关于我可以观察 UIViewController 何时更改 interfaceOrientation 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道在后台后何时显示 UIViewController 视图?
有没有办法知道何时呈现 UIViewController 失败?
使用 UICollectionViewCell 时,何时最好从属性中删除观察者?