私はここ数日iOSSDKで遊んでいて、現在再生中の曲を表示するうなずく小さなアプリケーションを作成することで、学んだ概念とアプローチを取り入れ始めているところまで来ています。音楽ライブラリから私のiPhoneにあります。
私が遭遇した問題は、オーディオの一部の再生が終了したときにAVAudioPlayerDelegateにデリゲートメソッドがありますが、呼び出されて/にフックできる通知/イベント/デリゲートメソッドの参照が見つからないようです。オーディオの一部が再生を開始したとき、つまりユーザーが再生ボタンを押したとき、またはトラックだけが変更されたときにリッスンしました。
iOS開発を丸3日(!!!)行って遊んだ後、それを行う方法は明らかにあるでしょうが、それをどこで何を見つけるかはわかりません。情報を入力するために現在行っているようにUIにプッシュボタンがあることを除けば(これは正常に機能し、バックエンドコードは意図したとおりに機能します)、私が見ることができる他の唯一のアプローチは、トラックにフックすることです。前述のデリゲートでメソッドの再生を終了し、それを使用します。
しかし、それは少しハッキーなようです。
更新しました
さて、一瞬完全に遅らせたと思います。これは、Javaのバックグラウンドで初めてiOSをいじることで得られるものです。私はあなたの提案を次のように(いくつかの構文上の調整を加えて)実装しました:
hファイル:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>
@protocol GeoTunesAVAudioPlayerDelegate <AVAudioPlayerDelegate>
-(void)didStartPlaying;
@end
@interface GeoTunesAVAudioPlayer : AVAudioPlayer <AVAudioPlayerDelegate>
@end
およびmファイル:
#import "GeoTunesAVAudioPlayer.h"
@implementation GeoTunesAVAudioPlayer
- (id)init
{
self = [super init];
return self;
}
- (BOOL) play
{
if ([[self delegate] respondsToSelector:@selector(didStartPlaying)])
{
[(id)[self delegate] didStartPlaying];
}
return [super play];
}
@end
そして、これをコントローラーに実装します。
// Set up the audio delegate
player = [[GeoTunesAVAudioPlayer alloc] init];
player.delegate = self;
しかし、この小さな配置はEXC_BAD_ACCESSで失敗します。これは、問題が何であるかを評価するために、ここで舞台裏で何が起こっているかについて十分に理解していないため、イライラします。助言がありますか?