0

我有一个标签栏控制器和 2 个视图控制器连接到它。在它们中的每一个上都有一个代码可以自动滚动浏览一些图像并为每个图像播放不同的声音。

问题是当我在 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

虽然 aUITabBarController管理它管理的视图控制器的生命周期,但您无法获得关于它们何时创建和销毁的任何具体保证——我怀疑它因版本而异。

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 回答