- 締切済み
iPhone プログラミング
こんにちは! 下記のように、親Viewにボタンをつけて子View(DANextView)を表示させてます。 -(IBAction)goToNextView:(id)sender { DANextView *nextView = [[DANextView alloc] initWithNibName:@”DANextView” bundle:[NSBundle mainBundle]]; [self.navigationController pushViewController:nextView animated:YES]; } そして、その子ViewにAVAudioPlayerの諸々一式を実装しているのですが、下記の様に、 (親View)>(子View)>(音楽再生)>(再生させたまま親Viewに戻る)>(再度子View表示) を行なった所、子Viewで再生中の音楽を制御できマセン。。(停止できない)。 全く新しい子Viewが呼ばれている(?)ような状況です。 どのようにすれば、再表示の子Viewでも、AVAudioPlayerを制御できるようになるのでしょうか?お助け下さい!
- みんなの回答 (1)
- 専門家の回答
みんなの回答
見たところ、毎回、allocしてるようですので、次々インスタンスが作られているはずですね。「子Viewで再生中の音楽を制御できない」ということですが、これには子ViewでDANextViewインスタンスに何らかの形でアクセスをしているはずです。これは、どういう形になっているのでしょう。再生中のAVAudioPlayerが含まれたDANextViewをどこかで管理する仕組みは用意されていますか? あるいは、毎回、DANextView allocせずに、起動時に作成したインスタンスをどこか(まぁ、親Viewとか、NSApplicationとか)に保管しておいて、goToNextViewではそのインスタンスを表示させるようにする、とか。実際に試してはいないのですが……。
お礼
コメント大変ありがとうございます!下記がソース全部なんです。なにせ、超初心者なもので、びっくりされるような部分多々有ると思います。下記を例にとって、もう少しアドバイスいただけましたら大変嬉しいです。どうぞ宜しくお願い致します! //******************* //DAViewController.h(Parent) //******************* #import <UIKit/UIKit.h> @interface DAViewController : UIViewController @end //******************* //DAViewController.m(Parent) //******************* #import "DAViewController.h" #import "DANextView.h" #import "DANextView2.h" @interface DAViewController () @end @implementation DAViewController -(IBAction)goToNextView:(id)sender { DANextView *nextView = [[DANextView alloc] initWithNibName:@"DANextView" bundle:[NSBundle mainBundle]]; [self.navigationController pushViewController:nextView animated:YES]; } -(IBAction)goToNextView2:(id)sender { DANextView2 *nextView2 = [[DANextView2 alloc] initWithNibName:@"DANextView2" bundle:[NSBundle mainBundle]]; [self.navigationController pushViewController:nextView2 animated:YES]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)dealloc { [super dealloc]; } @end //******************* //DANextView.h(Child) //******************* #import <UIKit/UIKit.h> #import <MediaPlayer/MPVolumeView.h> #import <AudioToolbox/AudioToolbox.h> #import <AVFoundation/AVAudioPlayer.h> #import <AVFoundation/AVFoundation.h> @interface DANextView3 : UIViewController <AVAudioPlayerDelegate> { AVAudioSession *audioSession; NSURL *soundFile; AVAudioPlayer *sound; NSTimer *myTicker; IBOutlet UISlider *volumeSlider; IBOutlet UISlider *mySlider; } @property (nonatomic ,retain) UISlider *volumeSlider; @property (nonatomic ,retain) AVAudioSession *audioSession; @end //******************* //DANextView.m(Child) //******************* #import "DANextView.h" #import "DAViewController.h" @interface DANextView () @end @implementation DANextView @synthesize volumeSlider; @synthesize audioSession; -(IBAction)playSound:(id)sender { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; if(sound) [sound release]; soundFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"mp3"]]; sound = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFile error:nil]; sound.delegate = self; sound.numberOfLoops = -1; [sound prepareToPlay]; [sound play]; } -(IBAction)restSound:(id)sender{ [sound stop]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)dealloc { [soundFile release]; [sound release]; [super dealloc]; } @end
補足
コメント大変ありがとうございます!下記がソース全部なんです。なにせ、超初心者なもので、びっくりされるような部分多々有ると思います。下記を例にとって、もう少しアドバイスいただけましたら大変嬉しいです。どうぞ宜しくお願い致します! //******************* //DAViewController.h(Parent) //******************* #import <UIKit/UIKit.h> @interface DAViewController : UIViewController @end //******************* //DAViewController.m(Parent) //******************* #import "DAViewController.h" #import "DANextView.h" #import "DANextView2.h" @interface DAViewController () @end @implementation DAViewController -(IBAction)goToNextView:(id)sender { DANextView *nextView = [[DANextView alloc] initWithNibName:@"DANextView" bundle:[NSBundle mainBundle]]; [self.navigationController pushViewController:nextView animated:YES]; } -(IBAction)goToNextView2:(id)sender { DANextView2 *nextView2 = [[DANextView2 alloc] initWithNibName:@"DANextView2" bundle:[NSBundle mainBundle]]; [self.navigationController pushViewController:nextView2 animated:YES]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)dealloc { [super dealloc]; } @end //******************* //DANextView.h(Child) //******************* #import <UIKit/UIKit.h> #import <MediaPlayer/MPVolumeView.h> #import <AudioToolbox/AudioToolbox.h> #import <AVFoundation/AVAudioPlayer.h> #import <AVFoundation/AVFoundation.h> @interface DANextView3 : UIViewController <AVAudioPlayerDelegate> { AVAudioSession *audioSession; NSURL *soundFile; AVAudioPlayer *sound; NSTimer *myTicker; IBOutlet UISlider *volumeSlider; IBOutlet UISlider *mySlider; } @property (nonatomic ,retain) UISlider *volumeSlider; @property (nonatomic ,retain) AVAudioSession *audioSession; @end //******************* //DANextView.m(Child) //******************* #import "DANextView.h" #import "DAViewController.h" @interface DANextView () @end @implementation DANextView @synthesize volumeSlider; @synthesize audioSession; -(IBAction)playSound:(id)sender { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; if(sound) [sound release]; soundFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"mp3"]]; sound = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFile error:nil]; sound.delegate = self; sound.numberOfLoops = -1; [sound prepareToPlay]; [sound play]; } -(IBAction)restSound:(id)sender{ [sound stop]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)dealloc { [soundFile release]; [sound release]; [super dealloc]; } @end