添加视频背景视图的最佳做法是啥?
Posted
技术标签:
【中文标题】添加视频背景视图的最佳做法是啥?【英文标题】:What is the best practice add video background view?添加视频背景视图的最佳做法是什么? 【发布时间】:2015-06-22 09:06:59 【问题描述】:我想在应用程序“Uber”中添加带有视频(或 gif)的背景视图 我想在我的应用中长时间使用视频背景视图。
我想知道这些问题的答案:
其中哪些会消耗更少的电池能量 我可以在 iPhone 或 iPad 上使用它吗 此方法的性能报名表截图
【问题讨论】:
“最佳实践”问题不鼓励提问者表现出努力。因为它们不适合 Stack Overflow。 meta.stackexchange.com/questions/142353/… 我同意你的观点,但是如果我想长时间使用那种或其他方式的背景视图,我想知道,它们中的哪一个会消耗更少的电池能量,我可以在上面使用它吗? iPhone 或 iPad。 所以你的问题只是一个很好的例子,为什么最佳实践问题不好:有人应该如何通过询问最佳实践来预测这一点? 现在您得到了 5 个不再回答您编辑的问题的答案。 @vikingosegundo 下次我会更聪明... 【参考方案1】:首先,
您有两个主要选择:使用带有 GIF 的 imageView 或 使用带有 AVPlayer 或 MPMoviePlayerController 的视频作为背景。你可以找到很多关于这两种方式的例子,这里有一些:
use a GIF for cool background video cover ios回答您的问题:
其中哪些会消耗更少的电池能量
通常使用视频:正如用户所指出的,vikingosegundo 视频通常经过优化,其编解码器处理 GPU;显示 GIF 应该是唯一的“CPU 作业”,因为它只是显示帧循环。因此,能量比较是在一个简单的帧循环 (GIF) 和一个可以通过多种方式加速的更复杂的帧循环(视频)之间进行的。然而,根据我的经验,一个小的 GIF 无论如何都能提供良好的性能。
我可以在 iPhone 或 iPad 上使用它吗
两者都有,但你必须小心纵横比和自动布局约束
此方法的性能
在这两种情况下都非常出色,但您必须注意 GIF 或视频的大小:文件(GIF 或视频)越大,性能应该越差。对于视频更准确地说,质量越高,性能越差,而视频的持续时间不应该受到影响。
【讨论】:
为什么gif会消耗更少的能量? 感谢您的回答@MassimoPolimeni,我想我会在性能和质量之间找到中庸之道。 @vikingosegundo 我添加了更多信息:) 现在我的答案更准确了。 @TikhonovAlexander ;) 玩得开心并做一些测试以找到最佳选择 我没有可依赖的真实数据。但是我看到我的计算机的 cpu 用于显示短 GIF,但通常不会显示 2 小时长的大分辨率 MPG。视频经过高度优化,其编解码器处理 GPU。我对 GIF 表示怀疑。 这是一个很好的观点。我看到小 GIF 在设备上的消耗非常小,但我从未对与视频的比较进行过如此多的调查。因此,感谢您对此发表评论,您让我搜索了有关它的更多信息,并且我肯定会更新我的答案!【参考方案2】:背景视频播放库示例源代码的流行和开源库之一,从下面的链接下载
-
VideoCover-iOS-Demo
AMLoginViewController Uses GPUImage For Filter videos.
希望对您有帮助。
【讨论】:
完全满足您的要求@TikhonovAlexander【参考方案3】:您可以为此目的使用许多开源组件。
比如这个支持GIF,电影播放
https://github.com/kaiinui/KIChameleonView
或者这个用于 GIF 播放
https://github.com/liyong03/YLGIFImage
【讨论】:
【参考方案4】:您可以直接使用视频并以重复模式播放,
或
您可以将图像与UIImageView
类的默认animationImages
属性一起使用。
如下图,
YourImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"sample_1.png"],
[UIImage imageNamed:@"sample_2.png"],
[UIImage imageNamed:@"sample_3.png"],
[UIImage imageNamed:@"sample_4.png"],
[UIImage imageNamed:@"sample_5.png"],
nil];
// How many seconds it should take to go through all images one time.
YourImageView.animationDuration = 5.0;
// How many times to repeat the animation (0 for indefinitely).
YourImageView.animationRepeatCount = 4;
[YourImageView startAnimating];
希望对你有所帮助。
【讨论】:
【参考方案5】:您可以使用.png
或.jpeg
格式的图像集来实现此目的,并将图像分配给UIImageView
:
UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 548)];
//Add images which will be used for the animation using an array. Here I have created an array on the fly
NSMutableArray *drawingImgs = [NSMutableArray array];
[drawingImgs addObject:[UIImage imageNamed:@"image1.png"]];
[drawingImgs addObject:[UIImage imageNamed:@"image2.png"]];
[drawingImgs addObject:[UIImage imageNamed:@"image3.png"]];
[drawingImgs addObject:[UIImage imageNamed:@"image4.png"]];
[drawingImgs addObject:[UIImage imageNamed:@"image5.png"]];
backgroundImageView.animationImages = drawingImgs;
//Set the duration of the entire animation
backgroundImageView.animationDuration = 0.5;
//Set the repeat count. If you don't set that value, by default will be a loop (infinite)
backgroundImageView.animationRepeatCount = 1;
//Start the animationrepeatcount
[backgroundImageView startAnimating];
【讨论】:
【参考方案6】:我使用了 xCode 7 和 iOS 9。 我使用了 gif 图像,它可以正常工作。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Name of your image" ofType:@"gif"];
NSData *gif = [NSData dataWithContentsOfFile:filePath];
UIWebView *webViewBG = [[UIWebView alloc] initWithFrame:self.view.frame];
[webViewBG loadData:gif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
webViewBG.userInteractionEnabled = NO;
[self.view addSubview:webViewBG];
【讨论】:
以上是关于添加视频背景视图的最佳做法是啥?的主要内容,如果未能解决你的问题,请参考以下文章