2017-05-10 8 views
0

タップしたときに再生と一時停止の画像を切り替えるボタンがあります。再生画像が表示されているときは、ループされたサウンドが再生されます。一時停止画像が表示されているときに、サウンドの再生が停止します。ループ再生で再生/一時停止ボタンを切り替える

私はこれを動作させることができましたが、1つの問題があります。あなたは(停止)それは音の最後の時間を果たしている一時停止ボタンをタップすると(その一時停止アクションは音の秒数だけ遅れています)。

はここに私のコードです:

@implementation ViewController 
AVAudioPlayer *myAudio; 

- (void)viewDidLoad { 
[super viewDidLoad]; 

[self.myButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
[self.myButton setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateSelected]; 
} 

- (IBAction)buttonTapped:(id)sender { 

NSURL *musicFile; 
musicFile = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]]; 
myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; 


    if(self.myButton.selected) 
     [self.myButton setSelected:NO]; 

    else 
     [self.myButton setSelected:YES]; 

    if(self.myButton.selected) 
     [myAudio setNumberOfLoops:-1]; 
     [myAudio play]; 
} 

答えて

1

あなたがプレイヤーにあなたがボタンをタップするたびに作成されてやっています。

あなたは試してみて、1 AVPlayerviewDidLoadで)作成し、それがbuttonTapped:機能でplaypause機能を使用する必要があります。ボタンをクリック

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.myButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
    [self.myButton setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateSelected]; 

    NSURL *musicFile = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]]; 
    myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; 
} 

- (IBAction)buttonTapped:(id)sender { 
    [self.myButton setSelected:!self.myButton.selected]; 
    if (self.myButton.selected) { 
    [player seekToTime:kCMTimeZero]; 
    [player play]; 
    } 
    else { 
    [player pause]; 
    } 
} 

それは状態(選択したかではない)だトグル最初のだろうと、その状態に基づいて、プレイヤーは(すぐに)巻き戻して再生を開始、またはそれ自体を一時停止します。

+1

そんなに@Ramonありがとう!!素晴らしい作品:) "player"を "myAudio"に変更しなければならず、 "seekToTime ..." - 関数を取得せずに "setNumberOfLoops"に変更しました。 –

関連する問題