1

ここに私の問題があります。起動時に音楽が再生されるアプリがあります。オーディオの再生を停止する設定ページにシンプルな 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" が存在することをまだ推測していない場合に備えてあります。

ただし、これはまったく機能しません。ボタンを押すと、アイコンが変わるだけです。助言がありますか?

4

4 に答える 4

0

musicof はインスタンス変数である必要があります。次のようにアクセスする必要があります。

self.musicof

また

_musicof
于 2013-05-08T11:15:54.977 に答える
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];
  }
}

お役に立てば幸いです。

于 2013-05-08T11:16:02.390 に答える
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];
     }

これがお役に立てば幸いです ;) はいの場合は評価してください ;)

于 2013-05-08T17:46:40.937 に答える
0

あなたは [player prepareToPlay]あなたのAVAudioPlayerオブジェクトにいないので、オーディオファイルを再生するのに時間がかかるので、最初[player prepareToPlay]にあなたのAVAudioPlayerオブジェクト

于 2013-05-08T12:05:46.133 に答える