我的应用程序设计要求 UIViews 能够感知旋转。
当我的应用程序启动时,它会收到一个UIApplicationWillChangeStatusBarOrientationNotification
.
然而,然后,在第一次旋转时(从任一方向到任一方向)都不会收到通知。
每个后续的轮换事件都会生成预期的UIApplicationWillChangeStatusBarOrientationNotification
通知。
这同样适用于UIDeviceOrientationDidChangeNotification
通知,当更改下面的代码以进行设备方向检查时 - 结果是相同的。
代码:(myUIView 初始化)
// set up to listen for rotation
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
(myUIView 旋转)
-(void)didRotate
{
if ([self landscape]) // rotated TO landscape
{
// do landscape stuff
}
}
(myUIView 中的旋转检查)
// answer the question: are we landscape? Yes or no. No indicates portrait.
-(BOOL)landscape
{
UIInterfaceOrientation iOrientation = [UIApplication sharedApplication].statusBarOrientation;
// Just get a displayable string version
NSString* iOrientationString ;
switch (iOrientation) {
case UIInterfaceOrientationPortrait : iOrientationString = @"UIInterfaceOrientationPortrait" ; break ;
case UIInterfaceOrientationPortraitUpsideDown : iOrientationString = @"UIInterfaceOrientationPortraitUpsideDown" ; break ;
case UIInterfaceOrientationLandscapeLeft:iOrientationString = @"UIInterfaceOrientationLandscapeLeft" ; break ;
case UIInterfaceOrientationLandscapeRight:iOrientationString = @"UIInterfaceOrientationLandscapeRight " ; break ;
}
NSLog(@"%@=%@" , @S(iOrientation ) , iOrientationString ) ;
return UIInterfaceOrientationIsLandscape(iOrientation);
}
我注意到在 中UIViewController
,-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
正确地调用了第一次旋转和所有。
但我想有旋转感知视图。对于缺少的第一个事件,是否有解释和/或解决方法?