gpt4 book ai didi

ios - 在 iOS 中使用 MPMusicPlayerController 播放和跳过播放列表中的下一首歌曲

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:43 24 4
gpt4 key购买 nike

我在 NSArray 中有歌曲播放列表,并在我的 UITableView 中显示这些歌曲,如下图所示。

enter image description here

在我的例子中,当我从 UITableView 选择一首歌时,我想用 MPMusicPlayerController 的 applicationMusicPlayer 播放那首歌。

我的意思是当我从 UITableView 中选择 american idiot 时,我想用 MPMusicPlayerController's 玩 American idiot

当我点击下面的跳过按钮时,它一定是播放下一首歌曲,就像 suburbia 的耶稣。

这是我将歌曲加载到 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];

我想你明白我的意思了。当我从 UITableView 中选择歌曲时,我想像 iOS 一样在音乐应用程序中构建所有音乐按钮并播放歌曲。

我正在尝试 anyting ,但我没有找到可以解决我的问题的解决方案。

请帮助我这样做。

谢谢。 :)

最佳答案

假设您的 NSArray 由 MPMediaItemCollection 中的 MPMediaItems 填充,一旦您知道需要配置什么,这实际上相当简单。首先,创建一个 iVar,最好是 NSUInteger 来存储当前播放轨道的索引。这对于按顺序从一个轨道转到另一个轨道是必要的。

其次,很难从您的帖子中判断轨道标题是从集合中的媒体项目中读取的,还是只是静态地放在 table 上的,但我提供了一个如何阅读的示例数组中媒体项的轨道标题,并使用 valueForProperty 将该值设置为单元格文本。

最后,didSelectRowAtIndexPath 配置如下,以演示将您已经创建的无符号整数设置为所选单元格的值。 didSelectRowAtIndexPath 和我创建的两个 IBAction 都修改了这个索引的值,然后调用我创建的 void “stopCurrentTrackAndPlaySelection” 停止当前播放的轨道,将 MPMediaItem 类型转换为该对象索引,然后重新开始播放。

如果您需要更多说明,请询问 :)

旁注:我建议您将媒体选择器选择 (MPMediaItemCollection) 的副本存储在 NSMutableArray 而不是 NSArray 中,或直接存储在 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];
}

关于ios - 在 iOS 中使用 MPMusicPlayerController 播放和跳过播放列表中的下一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com