我有播放声音,当用户点击导航栏上的回栏按钮,这里是代码代码:播放声音时,按后退按钮(不包括动画)
@property(strong,nonatomic) SoundPlayer *soundPlayer;
- (IBAction)voltar:(id)sender{
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
[self.navigationController popViewControllerAnimated:YES];
}
我的代码工作得非常好,但我有一个问题!我想在视图消失时制作不同类型的动画,为此,我需要将popViewControllerAnimated设置为否。
当我做这种事情时,我的播放器不播放声音!但为什么?我认为,因为有动画,视图将会释放并且声音不会播放,当动画播放时,声音播放效果非常好,因为必须有很短的延迟才能观看场景。
我的最后一次尝试是ViewWillDisappear
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
}
这里是我用来打发我的看法动画:
-(void)setAnimation{
CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
}
我怎么能解决这个问题?
解决方案
我能解决这个问题,创建视图熄灭前,将睡我的代码代码:
[NSThread sleepForTimeInterval:0.1f];
我相信这是不是解决这个最专业的方式类似的东西,但...
解决方案2
嘿,我们可以使用一个回调时的过渡处理:d
-(void)setAnimation{
CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
}
嗯,我想这就是解决这个问题的最好方法和专业的方式(比睡眠的效果是杰里 - 钻机)
修正
嗯,我意识到这个代码的一些测试,并看到animationDidStop不播放声音,播放声音的代码是viewDidDisappear,但是为什么?
让我们思考......当我在我的动画中给委托给自己时,我的代码在动画停止时欠下代码的执行,即使所有东西都从场景中取出(我认为)。
但是在这个时候viewDidDisappear被称为...并执行歌曲。所以...所有我需要做的是给授人以我的动画,并把声音里面viewDidDisappear和删除方法animationDidStop(像一个bug,奇怪...)
你试过在不同的线程中播放声音吗? – zcui93
@ zcui93使用GDC?是的,我尝试但不工作... – LettersBa
只需创建一个单身播放声音。一位将负责处理这一切的经理。一些枚举可能很好地指示播放什么声音。接下来,你可以控制如果在你还在播放某种声音时播放另一个声音,该怎么办......做这种事情的一般方法。 –