gpt4 book ai didi

ios - 在另一个类中停止 AVAudioPlayer

转载 作者:行者123 更新时间:2023-11-29 04:37:39 26 4
gpt4 key购买 nike

我搜索了多个论坛(包括这个论坛),但找不到解决我的问题的方法。我有一个声音文件设置为在加载“IQTest” View Controller 时播放。它播放得很好,我可以在“IQTest” View Controller 中停止声音。

IQTest.h

@interface IQTest : UIViewController
{
AVAudioPlayer *theAudio;
}
@property (nonatomic, strong) AVAudioPlayer *theAudio;
@end

IQTest.m

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"IQTestBackgroundMusic" ofType:@"mp3"];
AVAudioPlayer* soundTrack=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
soundTrack.numberOfLoops = -1;
self.theAudio = soundTrack;
[theAudio play];
}

当用户按下“IQTestQuestionThree” View Controller 中的按钮时,我想停止播放声音,但是当我尝试停止声音时,它要么继续播放,要么我的应用程序崩溃。我尝试了多种方法,但尚未找到一种方法来停止我的声音。

IQTestQuestionThree.m

- (IBAction) question3Answer1
{
IQTest *IQTestAudio = [[IQTest alloc] init];
[IQTestAudio.theAudio stop];

iqScaryFace.hidden = NO;
homeButton.hidden = NO;
homeButtonLabel.hidden = NO;
answer1Button.hidden = YES;
answer2Button.hidden = YES;
answer3Button.hidden = YES;
answer4Button.hidden = YES;
}

感谢您为我提供的任何帮助。

最佳答案

- (IBAction) question3Answer1
{
IQTest *IQTestAudio = [[IQTest alloc] init];
[IQTestAudio.theAudio stop];

此代码创建一个全新的 IQTest 对象(它是 UIViewController 子类 - 因此具有令人困惑的名称),然后调用其 stop 方法。

这个全新的 IQTest 对象(也许将其重命名为 IQTestViewController?)刚刚创建 - 它与开始播放声音的对象不同。所以你期望它停止播放一些它无法控制的东西。 (至少,在没有看到更多代码的情况下,我不希望它能够工作。)

I want to stop playing the sound when a user presses the button in "IQTestQuestionThree"'s view controller

View 层次结构是如何构建的?

IQTestQuestionThree 是一个父级为 IQTest 的 View Controller 吗? (再次考虑将 IQTestQuestionThree 重命名为 IQTestQuestionThreeViewController。)如果是这样,您可以使用 delegate patternIQTestQuestionThree 提醒 IQTest 停止播放声音。

如果您的 View Controller 层次结构更复杂,和/或其他地方有其他 View Controller 可能想要停止播放声音,请考虑创建 model class声音播放充当 proxy要播放声音,请在应用程序委托(delegate)中实例化该模型类,并将其传递给需要控制音频的所有 View Controller 。

(UIViewController 子类,按照惯例,其名称带有“ViewController”作为后缀。您会发现 Apple 的源代码中就是这种情况。如果您想要编写代码以提高可读性,您应该尽可能遵循编写语言的约定。)

关于ios - 在另一个类中停止 AVAudioPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com