gpt4 book ai didi

ios - 遍历 NSDictionary 和 IOS 中的计时事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:42:15 26 4
gpt4 key购买 nike

我是 IOS/Objective C 的新手,正在尝试找出创建集合、迭代集合和计时事件的最佳方法。

我有一首歌曲的一系列台词,当音乐在歌曲中的正确位置播放时,我希望在屏幕上显示歌曲的单行。因此,我开始执行以下操作:我将各个行放入字典中,并设置该行出现时间的毫秒值。

   NSDictionary *bualadhBos = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:2875], @"Muid uilig ag bualadh bos, ",
[NSNumber numberWithInt:3407], @"Muid uilig ag tógáil cos, ",
[NSNumber numberWithInt:3889], @"Muid ag déanamh fead ghlaice, ",
[NSNumber numberWithInt:4401], @"Muid uilig ag geaibíneacht. ",
[NSNumber numberWithInt:4900], @"Buail do ghlúine 1, 2, 3, ",
[NSNumber numberWithInt:5383], @"Buail do bholg mór buí, ",
[NSNumber numberWithInt:5910], @"Léim suas, ansin suigh síos, ",
[NSNumber numberWithInt:6435], @"Seasaigh suas go hard arís. ",
[NSNumber numberWithInt:6942], @"Sín amach do dhá lamh, ",
[NSNumber numberWithInt:7430], @"Anois lig ort go bhfuil tú ' snámh. ",
[NSNumber numberWithInt:7934], @"Amharc ar dheis, ansin ar chlé, ",
[NSNumber numberWithInt:8436], @"Tóg do shúile go dtí an spéir. ",
[NSNumber numberWithInt:8940], @"Tiontaigh thart is thart arís, ",
[NSNumber numberWithInt:9436], @"Cuir síos do dhá lámh le do thaobh, ",
[NSNumber numberWithInt:9942], @"Lámha suas is lúb do ghlúin, ",
[NSNumber numberWithInt:10456], @"Suigí síos anois go ciúin. ", nil
];

然后我想遍历 Dictionary,创建一个 Timer,它将调用一个负责更改 textLayer 中的文本的方法

for (id key in bualadhBos ) {
NSTimer *timer;
timer = [[NSTimer scheduledTimerWithTimeInterval:bualadhBos[key] target:self selector:@selector(changeText) userInfo:nil repeats:NO]];

}

-(void)changeText {
// change the text of the textLayer
textLayer.string = @"Some New Text";
}

但是当我开始调试它并检查它如何工作时,我注意到在调试器中,项目在字典中出现的顺序都被打乱了。我还担心(我对此了解不够)我正在创建多个计时器,并且可能有更有效的方法来解决这个问题。

任何方向将不胜感激。

最佳答案

字典按定义以最适合哈希算法的方式排序,因此您永远不应该依赖它们的顺序。

在您的情况下,最好构建一棵二叉树并拥有一个每秒触发一次的 NSTimer,执行二叉树搜索并返回最接近提供的时间偏移量的字符串。

如果你使用 AVFoundation 或 AVPlayer 进行播放。然后,要使字幕与媒体播放同步,您可以使用类似 addPeriodicTimeObserverForInterval 的方法每秒触发一次计时器,并在二叉树中执行搜索并更新 UI。

在伪代码中:

[player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:NULL usingBlock:^(CMTime time) {
// get playback time
NSTimeInterval seconds = CMTimeGetSeconds(time);

// search b-tree
NSString* subtitle = MyBtreeFindSubtitleForTimeInterval(seconds);

// update UI
myTextLabel.text = subtitle;
}];

关于ios - 遍历 NSDictionary 和 IOS 中的计时事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996838/

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