【问题标题】:How to Check Playback Time of Audioplayer increases by 2 seconds如何检查 Audioplayer 的播放时间增加 2 秒
【发布时间】:2013-03-02 20:55:48
【问题描述】:

我正在尝试编写一个循环来检查每当音频 player.currenttime 增加 2 秒时它应该执行更新视图方法

- (void)myTimerMethod{

 NSLog(@"myTimerMethod is Called");

myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                           target:self
                                         selector:@selector(checkPlaybackTime:)
                                         userInfo:nil
                                          repeats:YES];

  }


- (void)checkPlaybackTime:(NSTimer *)theTimer
  {
    float seconds =  audioplayer.currenttime;

    NSLog(@"Cur: %f",audioPlayer.currentTime ); 

    if (seconds = seconds + 2){

    [self update view];
}

 - (void)UpdateView{



if  (index < [textArray count])
 {
     self.textView.text = [self.textArray objectAtIndex:index];
   self.imageView.image = [self.imagesArray objectAtIndex:index];
   index++;
}else{

    index = 0;


   }
 }

如果音频 player.currenttimer 增加 2 秒,那么正确的写法是什么。

当前时间的 NSLog 始终显示 0.00。这是为什么。它应该随着音频播放器的播放而增加。

感谢您的帮助。

【问题讨论】:

    标签: objective-c xcode ios6 avaudioplayer nstimer


    【解决方案1】:

    我从你给出的解释中了解到你想增加这样的时间间隔

    Timer calls after 0.55
    Timer calls after 0.60
    Timer calls after 0.65
    Timer calls after 0.70
    

    等等。

    如果这是您想要做的。然后我认为你可以这样做,通过将repeats:YES 更改为repeats:NO 以便计时器不重复,然后在onTimer 中,只需启动一个间隔更长的新计时器。

    你需要一个变量来保存你的时间间隔,这样你就可以通过 onTimer 每次让它变长一点。

    另外,您可能不再需要保留计时器,因为它只会触发一次,当它触发时,您将获得一个新计时器。

    float gap = 0.50;
    
    [NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];
    
    -(void) onTimer {
    gap = gap + .05;
    [NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];
    }
    

    希望对你有帮助

    【讨论】:

    • 感谢您的回复。这个解决方案是我一直在寻找的最佳解决方案。
    【解决方案2】:

    首先,尝试在 NSLog 中使用浮点“秒”而不是当前时间。

    NSLog(@"Cur: %f", seconds); 
    

    当前时间不是浮点数,它是一个 NSTimer 对象,因此您必须在 NSLog 文本中使用 %@

    NSLog(@"Cur: %@",audioPlayer.currentTime ); 
    

    应该也可以。

    假设您的 audioPlayer 设置正确,如果您正在寻找计时器何时为 2 秒,您的 if 语句将是

    if(seconds == 2){
        [self update view];
    }
    

    如果您正在寻找每次计时器达到偶数时,即 2、4、6 等,您的 if 语句将是

    if(seconds % 2 == 0){
        [self update view];
    }
    

    if 语句中的 % 是模符号:http://www.cprogramming.com/tutorial/modulus.html

    此外,您当前的 if 语句正在分配而不是检查 seconds 变量。要检查它,您需要 == 而不是 =。但是,您当前的 if 语句永远不会为真,因为您正在检查一个变量本身 + 2。换句话说,如果秒等于 2,您的 if 语句询问是否 2 == (2+2) 或者它是否它是 4,它询问是否 2 == (4+2)。此陈述无法验证为真。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的详细回复。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多