0

Tab Bar Controller と 2 つの View Controller が接続されています。それらのそれぞれには、いくつかの画像を自動的にスクロールし、画像ごとに異なるサウンドを再生するコードがあります。

問題は、2 つのビュー コントローラー間を移動しているときに、離れたビュー コントローラーでサウンドとビジュアル アニメーションが停止しないことです。

残すビューコントローラーにあるものをすべて停止するにはどうすればよいですか?

- (void)scrollingTimer {
// access the scroll view with the tag
UIScrollView *scrMain = (UIScrollView*) [self.view viewWithTag:1];
// same way, access pagecontroll access
UIPageControl *pgCtr = (UIPageControl*) [self.view viewWithTag:12];
// get the current offset ( which page is being displayed )
CGFloat contentOffset = scrMain.contentOffset.y;
// calculate next page to display
int nextPage = (int)(contentOffset/scrMain.frame.size.height) + 1 ;
// if page is not 10, display it
if( nextPage!=10 )  {
    if (player.isPlaying == YES)
        [player stop];

    NSString *path;
    NSError *error;
    path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"cif%02i",nextPage+1] ofType:@"m4a"];
    if ([[NSFileManager defaultManager] fileExistsAtPath:path])
    {
        player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
        player.volume = 0.5f;
        [player prepareToPlay];
        [player setNumberOfLoops:0];
        [player play];
    }


    [scrMain scrollRectToVisible:CGRectMake(0, nextPage*scrMain.frame.size.height, scrMain.frame.size.width, scrMain.frame.size.height) animated:YES];
    pgCtr.currentPage=nextPage;
    // else start sliding form 1 :)


}
4

2 に答える 2

4

はそれが管理するView- ControllerUITabBarControllerのライフサイクルを管理しますが、それらがいつ作成および破棄されるかについて特定の保証は得られません-そしてそれはリリースごとに異なると思います.

UITabBarControllerデリゲート インターフェイスを提供します - UITabBarControllerDelegate- 具体的には

- (void)tabBarController:(UITabBarController *)tabBarController
  didSelectViewController:(UIViewController *)viewController` 

メソッド - この目的のために。

UITabBarControllerこれを行う最も簡単な方法は、デリゲートも実装するのサブクラスを作成することです。

TabBarController.h

#import <UIKit/UIKit.h>

@interface TabBarController : UITabBarController<UITabBarControllerDelegate>

@end

TabBarController.m

@implementation TabBarController


- (void)viewDidLoad
{
     // other initialisation here
     self.delegate = self;   
}

- (void)tabBarController:(UITabBarController *)tabBarController
 didSelectViewController:(UIViewController *)viewController
{
     if (viewController != myViewController)
     {
          // tell it to stop doing things
     }
}
@end
于 2013-03-15T15:04:28.243 に答える
0

私のアプリでは、一時停止していviewWillDisappearます。ビューに戻ったときに再生するために、 で一時停止をチェックしviewWillAppearます。

于 2013-03-20T20:18:05.420 に答える