【问题标题】:Pause the Views from Updating暂停更新视图
【发布时间】:2012-02-24 18:07:32
【问题描述】:

想要在按下暂停按钮时暂停多个视图的更新

在h文件中

@property BOOL appIsPaused;

在m文件中

@synthesize appIsPaused;

-(void)playpauseAction:(id)sender 
{

if  

  ([audioPlayer isPlaying]){

 [sender setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateSelected];

      [audioPlayer pause];

      appIsPaused = YES;

  } else {

 [sender setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];

      [audioPlayer play];

      appIsPaused = NO;

      [self performSelector:@selector(displayviewsAction:) withObject:nil afterDelay:11.0];

  }  

}

- (void)displayviewsAction:(id)sender
{
FirstViewController *viewController = [[FirstViewController alloc] init];

viewController.view.frame = CGRectMake(0, 0, 320, 480);

[self.view addSubview:viewController.view];

[self.view addSubview:toolbar];

[self performSelector:@selector(secondViewController) withObject:nil afterDelay:23];

[viewController release];

}

-(void)secondViewController {
SecondViewController *secondController = [[SecondViewController alloc] init];

secondController.view.frame = CGRectMake(0, 0, 320, 480);

[self.view addSubview:secondController.view]; 

[self.view addSubview:toolbar];

[self performSelector:@selector(ThirdviewController) withObject:nil afterDelay:27];

[secondController release];
}

对于多个视图,它会像这样继续。

任何想法如何在按下暂停按钮时暂停视图更新。

【问题讨论】:

    标签: iphone ios5 xcode4.2


    【解决方案1】:

    您应该考虑使用 NSTimer,而不是在延迟后使用 performSelector。

    像这样:

    声明一个 NSTimer *timer ivar。 声明一个 NSUInteger viewControl;

    将viewControl设置为0;

    在方法的播放部分添加这一行:

    timer = [NSTimer scheduledTimerWithTimeInterval:11 target:self selector:@selector(tick) userInfo:nil repeats:YES];
    
    -(void)tick
    {
        switch(viewControl)
        {
            case 0:
                [self performSelector:@selector(firstViewController) withObject:nil];
                break;
            case 1:
               [self performSelector:@selector(secondViewController) withObject:nil];
                break;
            case 2:
               [self performSelector:@selector(thirdViewController) withObject:nil];
               break;
            .
            .
            .
            default:
                break;
        }
    
        viewControl++;
    
        if(viewControl > MAX_VIEWS)
        {
             viewControl = 0;
        }
    }
    

    并在暂停操作中添加这一行:

    [timer invalidate]
    

    它也更干净,让您可以更好地控制您的代码。

    希望对你有帮助。

    【讨论】:

    • 你有点复杂所以我用这个代替 self.timer = [NSTimer scheduledTimerWithTimeInterval:11 target:self selector:@selector(displayviewsAction:) userInfo:nil repeats:NO];在暂停操作后,我添加了 [timer invalidate];它起作用了,但是当再次按下暂停按钮以恢复播放时,视图没有更新,但音频文件正在播放。我希望根据再次按下暂停按钮以恢复播放时给出的计时器来更新视图。我怎么能做到这一点。
    • 你只需要再次调用 scheduleTimerWithTimeInterval: 。将此代码添加到方法的播放部分。就这么简单。
    • 我会用更好的方法更新我的答案。在 switch 中使用 timerInterval 是错误的。您必须创建一个控件来映射下一个要调用的视图。这样,当您再次播放时,您将不会总是回到第一个图像。
    • 我必须添加什么代码才调用 scheduleTimerWithTimeInterval: 在语句 [audioplayer play] 之后;实际上我添加了 [timer isValid];声明后[audioplayer play];但似乎不起作用
    • [timer isValid] 仅用于检查时间是否已失效或是否仍在运行。您必须在 [audioplayer play] 之后再次添加 scheduleTimerWithTimeInterval:。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多