私はiOSの開発を開始しました。ポイントに右を取得するには...私は再生したいいくつかのオーディオファイルで設定されたUITableViewControllerを作成しました。私は正常に選択した行の文字列を渡し、UIViewControllerである 'Now Play View'にビューを変更します。そこから私はavaudioplayerを使用してオーディオを再生します。新しいオーディオインスタンスを作成し、以前選択したオーディオの上で新しく選択したオーディオを再生します。新しく選択したオーディオをロードできる「再生中」ビューを作成するにはどうすればよいですか?ここで既にデータが渡されているUIViewに戻る
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
@interface NowPlayingViewController : UIViewController{
AVAudioPlayer *audioPlayer;
//playPause button images
UIImage *playImg;
UIImage *pauseImg;
IBOutlet UIButton *playPauseButton;
//Volume slider
NSTimer *volumeTimer;
IBOutlet UISlider *volumeSlider;
}
//playPause button action
- (IBAction)playPause:(id)sender;
@end
??古いオーディオをクリアすると、実装ファイルである。
#import "NowPlayingViewController.h"
@implementation NowPlayingViewController
#pragma mark - My actions
//Audio Player Controllers
//Play the selected audio.
- (IBAction)playPause:(id)sender
{
if (![audioPlayer isPlaying]) {
[playPauseButton setImage:pauseImg forState:UIControlStateNormal];
[audioPlayer play];
} else {
[playPauseButton setImage:playImg forState:UIControlStateNormal];
[audioPlayer pause];
}
}
-(void)updateVolumeSlider
{
[audioPlayer setVolume:volumeSlider.value];
}
#pragma mark - Initialization
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
//Instantiate needed variables
playImg = [UIImage imageNamed:@"Play.png"];
pauseImg = [UIImage imageNamed:@"Pause.png"];
//Prepare the audio player
NSString *path = [[NSBundle mainBundle] pathForResource:self.title ofType:@"m4a"];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[audioPlayer prepareToPlay];
//Setup the volume slider
volumeTimer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(updateVolumeSlider) userInfo:nil repeats:YES];
}
MAINVIEWヘッダー
#import <UIKit/UIKit.h>
@interface MainTableViewController : UITableViewController{
NSMutableArray *performanceArray;
NSMutableArray *recoveryArray;
}
@end
MAINVIEW実装ファイル
#import "MainTableViewController.h"
#import "NowPlayingViewController.h"
@implementation MainTableViewController
#pragma mark - Table view
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 2;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if(section == 0)
return @"Performance";
else
return @"Recovery";
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return [performanceArray count];
else
return [recoveryArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
if(indexPath.section == 0)
cell.textLabel.text = [performanceArray objectAtIndex:indexPath.row];
else
cell.textLabel.text = [recoveryArray objectAtIndex:indexPath.row];
return cell;
}
#pragma mark - Prepare data to pass
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"Audio Selection Segue"])
{
// Get reference to the destination view controller
NowPlayingViewController *np = [segue destinationViewController];
//Pass the selected audio title to the Now Playing View
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];
np.title = cell.textLabel.text;
}
}
#pragma mark - didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"Audio Selection Segue" sender:self];
}
#pragma mark - Initialization
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
//Instantiate performanceArray
performanceArray = [[NSMutableArray alloc]initWithObjects:@"Centering", nil];
//Instantiate recoveryArray
recoveryArray = [[NSMutableArray alloc]initWithObjects:@"Power Nap", nil];
}
NowPlayingビューのインスタンスを1つしか必要としませんあなたは新しいものをインスタンス化しています)、それはまだ古いオーディオを再生しています(これはあなたのNowPlayingビューがクラス変数で動作していることを意味します)。2番目の問題を解決するには、コードを見る必要があります。 –
はい、私は新しいオーディオプレーヤーをインスタンス化しています。私は 'Now Playingクラス'を作成し、それをテーブルビューから渡すのですか?ヘッダファイルと実装ファイルを元の投稿に追加しました...ありがとうございました! – arynhard
コントローラのコードは正常です。親コントローラー?ナビゲーションコントローラーからポップアップしても音楽が再生されますか? –