2

私はプレイリストの曲を持っていてNSArray、その曲を私のUITableViewような次の写真に表示します。

ここに画像の説明を入力

私の場合、 から 1 曲を選択するUITableViewと、その曲を で再生したいと考えていMPMusicPlayerController's applicationMusicPlayerます。

からアメリカン・イディオットを選ぶUITableViewと、アメリカン・イディオットを一緒にプレイしたいMPMusicPlayerController's

そして、スキップボタンの下をタップすると、イエス・オブ・サバービアのように次の曲を再生する必要があります。

曲を UITableView にロードする私のコードは次のとおりです

self.player = [MPMusicPlayerController applicationMusicPlayer];

    MPMediaQuery *query = [MPMediaQuery playlistsQuery];
    MPMediaPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:@"GreenDay" forProperty:MPMediaPlaylistPropertyName comparisonType:MPMediaPredicateComparisonContains];

    [query addFilterPredicate:predicate];

    self.arrayOfSongs = [query items];

私はあなたが私の意味を理解していると思います。音楽アプリでiOSビルドのようにすべての音楽ボタンの機能を実行し、から曲を選択すると曲を再生したいUITableView

私は何でもしようとしていますが、私の問題を解決できる解決策が見つかりませんでした。

私がそのようにするのを手伝ってください。

ありがとうございます。:)

4

1 に答える 1

2

NSArray が MPMediaItemCollection からの MPMediaItems で取り込まれたと仮定すると、何を構成する必要があるかがわかれば、これは実際には非常に簡単です。まず、現在再生中のトラックのインデックスを格納する iVar (できれば NSUInteger) を作成します。これは、あるトラックから別のトラックに順番に移動するために必要です。

第二に、トラック タイトルがコレクション内のメディア アイテムから読み取られているのか、テーブルに静的に配置されているだけなのかをあなたの投稿から判断するのは難しいですが、トラック タイトルを読み取る方法の例を含めました。を使用して、配列内のメディア アイテムからその値をセル テキストとして設定しますvalueForProperty

最後に、didSelectRowAtIndexPath作成済みの符号なし整数を選択したセルの値に設定する方法を示すために、以下で構成します。両方didSelectRowAtIndexPathと、作成した 2 つの IBActions の両方が、このインデックスの値を変更してから、作成した "stopCurrentTrackAndPlaySelection" を呼び出します。これにより、現在再生中のトラックが停止し、MPMediaItem がそのインデックスのオブジェクトにタイプキャストされてから、再び再生が開始されます。

さらに明確にする必要がある場合は、質問してください:)

補足:メディア ピッカーの選択 (MPMediaItemCollection) のコピーを、NSArray ではなく NSMutableArray に保存するか、MPMediaItemCollection を直接保存することをお勧めします。これにより、再生を停止することなく、オンザフライでトラックを追加または削除できます。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myArrayOfTracks count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    [[cell textLabel] setText:[(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyTitle]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    indexOfCurrentlyPlayingTrack = indexPath.row;
    [self stopCurrentTrackAndPlaySelection];
}

- (IBAction)nextTrack:(UIButton *)sender
{
    indexOfCurrentlyPlayingTrack ++;
    [self stopCurrentTrackAndPlaySelection];
}

- (IBAction)previousTrack:(UIButton *)sender
{
    indexOfCurrentlyPlayingTrack --;
    [self stopCurrentTrackAndPlaySelection];
}

- (void)stopCurrentTrackAndPlaySelection
{
    [myMPMusicPlayerController stop];
    [myMPMusicPlayerController setNowPlayingItem:(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexOfCurrentlyPlayingTrack]];
    [myMPMusicPlayerController play];
}
于 2013-01-10T14:40:44.660 に答える