利用UIWebView打造一个炫酷的视频背景视图(OC & Swift)

http://www.cocoachina.com/ios/20151023/13860.html

2015-10-6更新:适配 Swift2.0

如有需要,可以通过[email protected]发私信或联系我。

注:使用GIF动态图片只是一种可行的方式达到该效果,并非唯一解决方案。我个人更倾向于通过视频播放器的方式来实现视频背景效果,然而通过GIF图片仍然是一个可行的选项。实施步骤直接跳转到下面的"工作前准备"。

如果你使用过iOS版本的Spotify ,你会注意到在这款应用的新版本中,他们使用了一个播放的视频作为app启动的背景。相对于静态的图片背景来说,这是一个相当酷的设计。如果你还没有见过这类设计,可以瞄一下我做的最终结果:

仅仅为了让你觉得有趣,我在从柏林到格拉茨的火车上拍下了这个轨道的慢移视频

于是我开始着手重新创建一个编程的实践,来达到相同的效果。那么问题来了:怎样实现?我首先想到的是,创建一个视频播放器并且让这个视频文件在背景视图上重复播放。但是我还要放其他控件到视图上面,而且我也不需要视频的声音。

然后我想到了GIF文件。现在的问题是:要怎么样把一个GIF放到一个视图上去?据我所知,UIImageView和UIImage都不支持GIF动画。尽管UIImageView可以通过添加多张图片和动画结合的方式来实现,我们真的需要从视频中截取大量的图片并把所有的这些图片全都添加到工程中吗?这样制作视频的工作准备未免太复杂了。那还有什么支持GIF呢?答案是UIWebView。

工作前准备:处理视频

准备一个你想作为背景播放的视频。有无数的软件和网页应用可以用来把视频转换为GIF图片,如果你想得到最佳效果,需要把它们裁剪为iPhone的屏幕大小

有一个非常好的指南来教你怎样制作,更多的资源你也可以从Google获取。这里我用的是一个叫做 GIF Brewery的软件。这个软件也有一篇非常详细的指南页,非常简单易上手。

把GIF添加到工程中

跟添加其他文件一样,直接把GIF文件拖到你工程的导航目录中。

开始编写代码

我会使用Objective-C和Swift来展示如何达到目的。所有的代码都写在默认加载的viewController中的viewDidLoad 里。

1.创建一个GIF的文件路径,用来读取你添加的GIF文件。

Objective-C:


1

2

3

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"railway" ofType:@"gif"];

NSData *gif = [NSData dataWithContentsOfFile:filePath];

Swift:


1

2

3

let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")

let gif = NSData(contentsOfFile: filePath!)

2. 创建一个UIWebView并且把GIF转换成的NSData形式作为它的数据源。由于需要把它作为背景,因此frame尺寸应该根据iPhone的屏幕尺寸设定。同时,UIWebView类似于scrollview,你需要设置它的userInteractionEnabled 属性设为NO。然后把UIWebView添加到主视图上去。

Objective-C:


1

2

3

4

5

6

7

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];

Swift:


1

2

3

4

5

6

7

let webViewBG = UIWebView(frame: self.view.frame)

webViewBG.loadData(gif!, MIMEType: "image/gif", textEncodingName: String(), baseURL: NSUrl())

webViewBG.userInteractionEnabled = false;

self.view.addSubview(webViewBG)

3.可选:我还需要添加其他按钮到背景上,因此我使用了另一个黑色的过滤视图,alpha值设为0.05,覆盖到UIWebView上。这样可以淡出背景视图,同时让按钮和按钮的标题更突出。

Objective-C:


1

2

3

4

5

6

7

UIView *filter = [[UIView alloc] initWithFrame:self.view.frame];

filter.backgroundColor = [UIColor blackColor];

filter.alpha = 0.05;

[self.view addSubview:filter];

Swift:


1

2

3

4

5

6

7

8

9

Let filter = UIView()

filter.frame = self.view.frame

filter.backgroundColor = UIColor.blackColor()

filter.alpha = 0.05

self.view.addSubview(filter)

4.添加其他你需要添加的,完成!

总结:

完整工程可以从我的GitHub下载和使用。示例中使用的GIF文件也在里面。以上可能并非最好的解决方式,欢迎共同探讨。

这是我博客的第一篇文章,很高兴能够开始写博客了。我会继续分享一些日常中创新性和值得分享的设计和编程技巧。欢迎在Medium 和 Twitter上关注我。

时间: 2024-12-05 05:27:53

利用UIWebView打造一个炫酷的视频背景视图(OC & Swift)的相关文章

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

一个炫酷的Actionbar效果

今天在网上看到一个炫酷的Actionbar效果,一个老外做的DEMO,目前很多流行的app已经加入了这个效果. 当用户初始进入该界面的时候,为一个透明的 ActiionBar ,这样利用充分的空间显示大图片,如果用户滚动页面需要查看内容的时候,则大图收缩到 ActionBar 中. 源码下载:http://files.cnblogs.com/sage-blog/notboringactionbar.zip 参考:http://flavienlaurent.com/blog/2013/11/20/

炫酷HTML5网页背景动画

炫酷HTML5网页背景基于Canvas绘制 function resized() { canvas.width = window.innerWidth; canvas.height = window.innerHeight; ({ width, height } = canvas); width_half = width * 0.5; height_half = height * 0.5; canvasHypot = Math.hypot(width_half, height_half); ct

来一个炫酷的导航条

本文分享一个带动画效果的中英文切换导航条. 鼠标放上去试一下: a:hover { margin-top: -40px } INDEX 首页 BBS 社区 HOME 我 1.用CSS3实现 效果看上去复杂,其实我们先来做出一个样式,就很简单了.如下: 代码: <nav> <ul class="list"> <li> <a href="#"> <b>INDEX</b> <i>首页<

【无私分享】干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~

最近公司项目中有一个按日期查看信息的功能,楼主本想用之前用的wheelView将就使用的,不过产品经理有个新要求,就是点击按钮弹出的日期选择对话框必须显示农历节假日,周几什么的.这可就难为人了,倘若使用之前的滚动时间选择器,无疑是难以实现的,楼主辗转反侧,冥思苦想,却不得正果. 好吧,去网上下了几个OA系统一用就有了idea,突然想到手机自带的日历~~,oh,year,日历就有这功能,瞧瞧,我靠,这个东西,咋做. 仔细一瞧,似乎用GridView可以实现,额,二话不说就开干.折腾了半天都没弄好,

一个炫酷的导航菜单,模仿别人写的

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=

Photoshop和WPF双剑配合,打造炫酷个性的进度条控件

现在如果想打造一款专业的App,UI的设计和操作的简便性相当重要.UI设计可以借助Photoshop或者AI等设计工具,之前了解到WPF设计工具Expression Blend可以直接导入PSD文件或者AI设计文件(当然不是全部特征支持),最近研究了一下,也废了一番周折,好在最后实现了预期的效果.下面将step by step用示例说明如何先用PS构建一个矢量图形模板,然后用Expression Blend导入PSD文件,并获取PATH的Data值,为打造一款炫酷的个性进度条控件构建美观UI.

8个经典炫酷的HTML5 Canvas动画欣赏

HTML5非常强大,尤其是Canvas技术的应用,让HTML5几乎可以完成所有Flash能完成的效果.本文精选了8个经典炫酷的HTML5 Canvas动画欣赏,每一个都提供全部的源代码,希望对你有所帮助. 1.HTML5 Canvas可拖动的弹性大树摇摆动画 今天让我们继续来分享一个炫酷的HTML5动画,它是一款基于HTML5 Canvas的大树摇摆动画,这款HTML5动画的特点是我们可以拖拽树枝,从而让整棵树摇摆起来,这样就真实地模拟了大树从摇摆到静止的整个过程,相当逼真. 在线演示     

「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了

前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有同学私信给我说,大佬,怎么这些效果你都能找到?你是怎么搜索的,或者有其他什么秘方?会利用Google.百度等搜索工具搜索是一方面,另一个重要的方面是:记录搜藏,当看到一个炫酷的效果的时候,记得收藏起来,记录到自己云笔记或者收藏夹里,看得多了,印象就比较深刻,当遇到类似效果的时候,到自己记录收藏的地方找就是了.今天为大家推荐我所收藏的一些炫酷实用的效果的开源库(选择其中10个). 1.D