2013-05-08 99 views
1

好吧,这是我的问题。我有一个应用程序,其中有音乐在启动时播放,我想在设置页面中实现一个简单的uibutton,以阻止播放音频。AvAudioPlayer“停止”不起作用

页眉:

int musicof; 
IBOutlet UIButton *music; 
@property (nonatomic, strong) AVAudioPlayer *theAudio; 

方法:

- (IBAction)music:(id)sender{ 
if (musicof == 1){ 
    musicof = 2; 
[music setBackgroundImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal]; 
[music setImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal]; 
    [self.theAudio stop]; 
} 
else{ 
    musicof = 1; 
    [music setBackgroundImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 
    [music setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 
    [self.theAudio play]; 
} 

}

和柜面你还没有已经猜到整数 “musicof” 是有保留的按钮状态的记录。

但是,这是不工作的,我按下按钮结果只是图标更改。有什么建议么?

+0

有你检查与断点是条件工作与否? – Balu 2013-05-08 11:26:01

+0

将您的代码发布到您创建Audio Instanse方法的位置; – 2013-05-08 11:29:11

+0

该条件明显是 – haseo98 2013-05-08 11:29:26

回答

0

musicof需要是一个实例变量。你需要访问它,像这样:

self.musicof 

_musicof 
0

应用像这样。

导入此框架.h文件中

#import <AVFoundation/AVFoundation.h> 

在.m文件

@synthesize theAudio; 
在viewDidLoad中

实现此代码

NSURL *audioURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Tum Hi Ho" ofType:@"mp3"]]; 

NSData *audioData = [NSData dataWithContentsOfURL:audioURL]; 

theAudio = [[AVAudioPlayer alloc] initWithData:audioData error:nil]; 

[theAudio setNumberOfLoops:0]; 

[theAudio prepareToPlay]; 

后实现代码

- (IBAction)music:(id)sender{ 

    if (musicof == 1){ 
     musicof = 2; 
     [music setBackgroundImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal]; 
     [music setImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal]; 

    if (self.theAudio.playing) { 
    [self.theAudio pause]; 
    } 

    [self.theAudio stop]; 

    self.theAudio.currentTime = 0; 
    } 
    else{ 
    musicof = 1; 
    [music setBackgroundImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 
    [music setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 
    [self.theAudio play]; 
    } 
} 

我希望它可以帮助你。

+0

没有工作,结果仍然是: – haseo98 2013-05-08 11:20:59

+0

我已经在我的演示中实现它,它的工作正常。请看我编辑的代码。 – chandan 2013-05-08 11:35:36

+0

嗯奇怪,这是否与我的设置页面有关是在一个单独的视图(相同的类)? – haseo98 2013-05-08 11:44:13

0

你是不是[player prepareToPlay]AVAudioPlayer对象,以便它需要时间来播放音频文件,以便第一[player prepareToPlay]AVAudioPlayer对象

0

首先,你需要创建超:在你的appdelegate.h加 :

#import <AVFoundation/AVFoundation.h> 
#import <AudioToolbox/AudioToolbox.h> 

@interface RADAppDelegate : UIResponder <UIApplicationDelegate> { 

    AVPlayer *myAudioPlayer; 
} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) AVPlayer *myAudioPlayer; 

@end 

和你appdelegate.m下didFinishLaunchingWithOptions地址:

[myAudioPlayer superclass]; 

试试这个简单而重复使用代码:

- (IBAction)playStop:(id)sender { 
MyAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 
if (appDelegate.myAudioPlayer.rate == 1.0){ 
UIImage *img = [UIImage imageNamed:@"Play_BT.png"]; 
     [sender setImage:img forState:UIControlStateNormal]; 
[appDelegate.myAudioPlayer pause]; //here is possible use stop or pause is depend if you use AVAudioPlayer or AVPlayer 
} else if (appDelegate.myAudioPlayer.rate == 0.0){ 

UIImage *img = [UIImage imageNamed:@"Pause_BT.png"]; 
     [sender setImage:img forState:UIControlStateNormal]; 
[appDelegate.myAudioPlayer play]; 

} 

} 

然后在您的文件。^ h添加UIIMage为您的按钮:

UIButton *control; 
@property (nonatomic, strong) IBOutlet UIButton *control; 

回来你file.m

,并补充一点:

- (void)viewWillAppear:(BOOL)animated { 
     MyAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    if (appDelegate.myAudioPlayer.rate == 1.0){ 

    UIImage *img = [UIImage imageNamed:@"Pause_BT.png"]; 
    [control setImage:img forState:UIControlStateNormal]; 

    } else if (appDelegate.myAudioPlayer.rate == 0.0) { 

    UIImage *img = [UIImage imageNamed:@"Play_BT.png"]; 
    [control setImage:img forState:UIControlStateNormal]; 
    } 

希望这有助于你;)如果是,请率;)