救命!播放声音时动画冻结\暂停

时间:2009-12-10 11:55:32

标签: iphone objective-c cocoa-touch animation

基本上每当我播放声音时动画减速或暂停,该怎么办???

声音大小20kb mp3。

动画大小5kb png。

代码:

- (void) startAnimation { 

 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:0.8];
 CGPoint destination = CGPointMake(152,20);
 pink.center = destination;
 [UIView commitAnimations];
 [soundPink play];    
}


- (void) initSoundResources {

 soundPink = [[APlayer alloc] initWithFile:@"pink" type:@"mp3"];
 soundPink = 0.4;
 }

1 个答案:

答案 0 :(得分:2)

修改

我刚刚注意到在initSoundResources中,你正在分配和初始化一个APlayer对象,但之后直接为指针指定一个浮点数。我很确定这不是你想要的。


试试这个:

- (void) startAnimation { 
     [UIView beginAnimations:nil context:nil];
     [UIView setAnimationDuration:0.8];
     [UIView setAnimationDelegate:self];
     [UIView setAnimationDidStopSelector:@selector(playSound)];
     CGPoint destination = CGPointMake(152,20);
     pink.center = destination;
     [UIView commitAnimations];   
}


- (void) initSoundResources {
     soundPink = [[APlayer alloc] initWithFile:@"pink" type:@"mp3"];
     soundPink = 0.4;
}


- (void) playSound {
    //assuming initSoundResources is called at some point before this...
    [soundPink play];
}

这里的想法是UIView动画是异步的。如果动画设置为0.8秒长,这并不意味着代码将需要0.8秒才能运行。

我的意思是在动画代码之后立即有效地调用UIView动画代码之后的代码。在这种情况下,声音将在动画开始之前播放(可能)。

我无法想象为什么它会暂停或冻结,但使用这种方法应该可行。

在我的代码中,我假设在尝试播放声音之前在某个时刻调用了initSoundResources方法。

如果soundPink指针未初始化为nil或有效的声音实例,则向其发送播放消息可能会导致崩溃。