2011-08-24 3 views
9

私のiPhoneアプリには面白い問題があります。私はテーブルを持つビューを持っており、クリックするとビデオのフルスクリーンが再生され、完了ボタンを押すとビデオが停止してテーブルビューに戻ります。唯一の問題は、ビデオの読み込みの最初の2〜3秒以内に完了を押すと、ビューがテーブルビューに戻ったときに、時間とバッテリーの強さなどを示す画面上部のバーが消えてしまうことですそこにはちょうど空白があります。しかし、最初の数秒後に「完了」を押すと、テーブルビューに戻ると、すべてが大丈夫です!私はなぜこれが起こっている絶対にないアイデアを持っていないと私はインターネット上で見つけた唯一の事は、私としてはかなり正確に同じ問題を持ついくつかの男であるこれである:これは、使用しようとする私を導くMPMoviePlayerControllerが終了した後の最上部のステータスバーが消える

http://www.iphonedevsdk.com/forum/iphone-sdk-development/53020-disappearing-status-bar.html

[UIApplication sharedApplication].statusBarHidden = NO; 

しかし、これはどこにもありません。

、彼らがビデオをクリックしたときに実行されるコード:

NSString *path = [[NSBundle mainBundle] pathForResource:currentTitle ofType:@"m4v"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
movieController = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
[movieController setControlStyle:MPMovieControlStyleFullscreen]; 
[movieController setFullscreen:YES]; 
movieController.view.frame = self.view.bounds; 
[self.view addSubview:movieController.view]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

そして、いずれかのビデオが行われたり、ユーザーがクリックが行われたときにされたときに実行されるコード:

NSLog(@"movieController moviePlayBackDidFinish"); 
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

[movieController setFullscreen:NO animated:NO]; 
[movieController.view removeFromSuperview]; 

[movieController release]; 

LiveEventsView *liveEventsView = [[LiveEventsView alloc] initWithNibName:@"LiveEventsView" bundle:nil]; 
UIView *currentView = self.view; 
UIView *theWindow = [currentView superview]; 
UIView *newView = liveEventsView.view; 
newView.frame = CGRectMake(0, 20, 320, 460); 
[currentView removeFromSuperview]; 
[theWindow addSubview:newView]; 
[UIApplication sharedApplication].statusBarHidden = NO; 

の場合誰でもこの状況でどんな光をも放つことができます、それは非常にイライラするので、私は非常に感謝しています!

おかげで、

マット

答えて

6

多分ビデオビューが消えたときからアニメーションは、ステータスバーのアニメーションとタイミングの問題を引き起こしています。

statusBarHidden = NOコールを数秒遅らせるようにしてください。

NSInteger delay = 3; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
[UIApplication sharedApplication].statusBarHidden = NO; 
}); 
+0

これはうまくいきますが、正常に遅延していると思われる最短時間は1秒ですが、これは少し長すぎます。私がそれを修正する唯一の方法なら、それはやりますが、好ましくは、ビューがロードされるとすぐに表示されます.1秒後ではなく –

6

代わりに、遅延をfloatに設定することができます。だからそれはだろう

float delay = 0.1; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
     [UIApplication sharedApplication].statusBarHidden = NO; 
     [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque; 
    }); 

私は同じ問題を抱えていて、リッチャーのコードを少し修正して解決しました。 0.1秒は受け入れ可能です。 BlackTranslucentのバースタイルが返され、元はBlackOpaqueスタイルだったので、ステータスバーのスタイルも変更する必要がありました。しかし今はうまくいく。

3

特定のソリューションでは、ステータスバーの下にコンテンツが表示されないことがあります。このアプローチはそれを修正します。

その後、MPMoviePlayerWillExitFullscreenNotification

 [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerWillExitFullscreen:) 
               name:MPMoviePlayerWillExitFullscreenNotification 
               object:self.moviePlayer]; 

ためのレジスタとステータスバーの表示をリセットし、メインウィンドウから削除し、rootViewControllerを再追加し、これは、ビューの境界が再び正しいことを確認します。

- (void)moviePlayerWillExitFullscreen:(NSNotification *)notification { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; 
    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 

    id rootViewController = appDelegate.window.rootViewController; 
    appDelegate.window.rootViewController = nil; 
    appDelegate.window.rootViewController = rootViewController; 
} 
関連する問題