检测用户是否在通话状态栏中

如何检测用户是否在通话或共享? 我有一个像这样的iAd子视图:

_UIiAD = [[self appdelegate] UIiAD]; _UIiAD.delegate = self; [_UIiAD setFrame:CGRectMake(0,470,320,50)]; [self.view addSubview:_UIiAD];\ 

当用户打电话时,它设置错误? 我如何检测这个?

UIApplicationDelegate有这两个方法。

 - (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame; // in screen coordinates - (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame; 

还有Notifications

 UIApplicationWillChangeStatusBarFrameNotification UIApplicationDidChangeStatusBarFrameNotification 

但是他们没有发布在应用程序的启动,所以我不会推荐它。

模拟器有一个有用的工具来testing。

 Hardware->Toggle In-Call Status Bar 

要实现,你必须在你的AppDelegate.m文件中实现这些方法。 当状态栏改变高度时,它们将被调用。 其中之一是之前和之后的其他变化。

假设你希望你的ViewController在更改发生时得到通知,一个选项是发送通知。 喜欢这个

首先,在AppDelegate.h上添加这个属性

 @property (assign, nonatomic) CGRect currentStatusBarFrame; 

然后,在AppDelegate.m上实现willChangeStatusBarFrame

 - (void) application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame { self.currentStatusBarFrame = newStatusBarFrame; [[NSNotificationCenter defaultCenter] postNotificationName:@"Status Bar Frame Change" object:self userInfo:@{@"current status bar frame": [NSValue valueWithCGRect:newStatusBarFrame]}]; } 

我们完成了Status Bar Frame Checker 。 在任何需要知道状态栏框架的ViewController上实现的下一个部分。

任何时候你想获得状态栏框架,你都这样做

 [(AppDelegate*)[[UIApplication sharedApplication] delegate] currentStatusBarFrame] 

并且在更改时得到通知,将其添加到ViewDidLoad方法中。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:@"Status Bar Frame Change" object:[[UIApplication sharedApplication] delegate]]; 

并执行这个方法

 - (void) statusBarFrameChanged:(NSNotification*)notification { CGRect newFrame = [[notification.userInfo objectForKey:@"current status bar frame"] CGRectValue]; NSLog(@"new height %f", CGRectGetHeight(newFrame)); // Here you do whatever you wanna do with the new height } 
Interesting Posts