好的,这是我的问题。我有一个应用程序,其中有启动音乐播放,我想在设置页面中实现一个简单的uibutton,停止播放音频。
部首:
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 :(得分:0)
musicof需要是一个实例变量。您需要像这样访问它:
self.musicof
或
_musicof
答案 1 :(得分: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];
}
}
我希望它可以帮到你。
答案 2 :(得分:0)
您[player prepareToPlay]
对象AVAudioPlayer
不是[player prepareToPlay]
因此需要花时间播放音频文件,因此首先AVAudioPlayer
{{1}}对象
答案 3 :(得分: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
和 didFinishLaunchingWithOptions 下的appdelegate.m添加:
[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];
}
希望这能帮助你;)如果是,请评价;)