我的應用程序設計需要UIViews能夠感知旋轉。iPad的旋轉:第一次旋轉事件沒有通知?
當我的應用程序啓動時,它收到一個UIApplicationWillChangeStatusBarOrientationNotification
。
然而,然後,在第一次旋轉(任一方向到任一方向)上不收到通知。
每個後續循環事件都會生成預期的UIApplicationWillChangeStatusBarOrientationNotification
通知。
這同樣適用於UIDeviceOrientationDidChangeNotification
通知,當下面的代碼被更改爲設備方向檢查 - 結果是相同的。
代碼: (myUIView INIT)
// 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
,第一次旋轉和全部。
但我想有旋轉感知的意見。有沒有解釋,和/或解決方案,爲失蹤的第一個事件?
put [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];放入applicationdidFinishLaunchingWithOptions或放到awakefromnib中。 – Maruti
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];在applicationdidFinishLaunchingWithOptions或awakefromnib中,它就是它的所在之處(我的發佈代碼的第一行)是否會產生如此巨大的差異?回想一下它(工作中) - 只是錯過了第一個事件。 –