Ios开发中的定时动画

Posted

技术标签:

【中文标题】Ios开发中的定时动画【英文标题】:Timing animation in Ios development 【发布时间】:2014-09-11 22:45:30 【问题描述】:

我正在寻找有关如何最好地为 ios 应用程序实现卡拉 OK 文本效果的建议。我是 IOS 新手,所以不熟悉所有各种动画 api 和库,我希望如果我指出学习哪些库的正确方向,我可以节省一些时间。

javascript 中,我会使用包含音轨的各种单词和时间的数组,并使用 setTimeout 将数组中的下一个元素写入页面上的 div。我确实考虑在 UIWebView 中使用这种方法,但是在对 UIWebview 进行了一些快速测试后,我对它看起来的流畅程度并不满意。

我确实遇到了一个非常简单的动画教程,它循环遍历一组图像,但它具有统一的动画持续时间,在我的用例中不起作用,因为文字需要在屏幕上显示的时间长度会有所不同根据音频。这是我正在查看的示例代码。

NSArray *imageNames = @[@"win_1.png", @"win_2.png", @"win_3.png", @"win_4.png",
                        @"win_5.png", @"win_6.png", @"win_7.png", @"win_8.png",
                        @"win_9.png", @"win_10.png", @"win_11.png", @"win_12.png",
                        @"win_13.png", @"win_14.png", @"win_15.png", @"win_16.png"];

NSMutableArray *images = [[NSMutableArray alloc]init];
for (int i= 0; i < imageNames.count; i++) 
    [images addObject:[UIImage imageNamed:[imageNames objectAtIndex:i]]];


UIImageView *animationImageView = [[UIImageView alloc] initWithFrame: CGRectMake(60,95, 86, 193)];
animationImageView.animationImages = images;
animationImageView.animationDuration = 0.5;

[self.view addSubview:animationImageView];
[animationImageView startAnimating];

UIImageView *slowAnimationImageView = [[UIImageView alloc] initWithFrame:CGRectMake(160, 95, 86, 193)];
slowAnimationImageView.animationImages = images;
slowAnimationImageView.animationDuration = 5;

[self.view addSubview:slowAnimationImageView];
[slowAnimationImageView startAnimating];

我在这里找到了该教程:http://www.appcoda.com/ios-programming-animation-uiimageview/

在此先感谢您对最佳方法的任何建议。

【问题讨论】:

你应该描述你想要完成的事情。卡拉 OK 效果到底是什么? 您还应该有一个NSArray 您想要的时间。像NSArray *durations = @[@2.1, @1.3 /* etc... */]; 这样的东西。然后,如果您将它们组合成这样的字典:NSDictionary* dict = [NSDictionary dictionaryWithObjects:durations forKeys:imageNames];,那么您可以轻松地用块枚举键-对象对。在块中,您为视图分配名为key 的图像(因为key 将遍历您的图像名称),然后等待[obj floatValue](这是与图像相关的时间)。我确信有更好的方法,这是相当“手动”的,但它有效。 【参考方案1】:

所以,我已经实现了您所描述的内容,我可以告诉您 CoreText 是您需要使用的 API。只有通过 CoreText 渲染,您才能以不同的颜色渲染特定的单词部分,并在特定时间应用颜色变化。但是,坏消息是这个 API 并不是很容易使用。您可以在以下 github 项目链接 github 的 MutableAttrString.m 和 AVOfflineComposition.m 文件中找到工作示例代码。您需要的最少代码位于 MutableAttrString.m 文件中,它显示了如何使用 CoreText 正确实现您描述的逻辑。您可以尝试使用动画位图推出自己的解决方案,但 CoreText 方法只是呈现文本,因此出于多种原因它会更好。

【讨论】:

我最终将我的字符串转换为 NSMutableStrings。然后我可以计算字符串并更改前 x 个字符的属性。

以上是关于Ios开发中的定时动画的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之动画中的时间

iOS动画开发----粒子系统---彩带效果

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发系列--让你的应用“动”起来

IOS开发定时器延时的探究

iOS开发简单的实现后台任务(诸如后台播放音乐,定时器,后台定位等)