import UIKit
import AVFoundation class GuidePage: FxBasePage { @IBOutlet var backImageView:UIImageView? var player:AVPlayer!
var playerItem:AVPlayerItem!
var location:FxLocation! override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
{
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} convenience init ()
{
var nibNameOrNil = String?("GuidePage") //考虑到xib文件可能不存在或被删,故加入判断
if NSBundle.mainBundle().pathForResource(nibNameOrNil, ofType: "nib") == nil {
nibNameOrNil = nil
} self.init(nibName: nibNameOrNil, bundle: nil)
} override func viewDidLoad()
{
super.viewDidLoad() initPlayVideo()
doAnimation()
} override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
} func doAnimation()
{
var images:[UIImage]=[]
var image:UIImage?
var imageName:String? for var index=; index<=;index++ {
imageName = "logo-" + String(format: "%03d", index)
image = UIImage(named: imageName!) images.insert(image!, atIndex: index)
} backImageView?.animationImages = images
backImageView?.animationRepeatCount =
backImageView?.animationDuration = backImageView?.startAnimating() UIView.animateWithDuration(0.7, delay:, options: .CurveEaseOut, animations: {
self.backView!.alpha = 1.0
self.player?.play()
}, completion: {
finished in
print("Animation End")
})
} func initPlayVideo ()
{
let path = NSBundle.mainBundle().pathForResource("welcome_video", ofType: "mp4")
let url = NSURL.fileURLWithPath(path!) playerItem = AVPlayerItem(URL: url)
player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = backView!.bounds
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect backView!.layer.insertSublayer(playerLayer, atIndex: )
backView!.alpha = 0.0 NSNotificationCenter.defaultCenter().addObserver ( self,
selector: "didFinishVideo:" ,
name: AVPlayerItemDidPlayToEndTimeNotification ,
object: playerItem)
}

  // 播放到视频结尾之后,要重新开放播放
func didFinishVideo(sender: NSNotification )
{
let item = sender.object as! AVPlayerItem item.seekToTime(kCMTimeZero) self.player.play()
}

  // 跳转登录
@IBAction func doLogin()
{
location = FxLocation()
location.startLocation()
}

  // 跳转注册
@IBAction func doRegister()
{
let page = CreateAccountPage()
let navPage = UINavigationController(rootViewController: page) self.presentViewController(navPage, animated: true, completion: nil)
}
}

第五篇、Uber用视频播放做启动动画的更多相关文章

  1. 第六十五篇、OC_iOS7 自定义转场动画push pop

    自定义转场动画,在iOS7及以上的版本才开始出现的,在一些应用中,我们常常需要定制自定义的的跳转动画 1.遵守协议:<UIViewControllerAnimatedTransitioning& ...

  2. Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子

    需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  5. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  6. 第五篇 Replication:事务复制-How it works

    本篇文章是SQL Server Replication系列的第五篇,详细内容请参考原文. 这一系列包含SQL Server事务复制和合并复制的详细内容,从理解基本术语和设置复制的方法,到描述它是如何工 ...

  7. 第五篇 SQL Server安全架构和安全

    本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...

  8. 第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  9. 【译】第五篇 SQL Server安全架构和安全

    本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...

随机推荐

  1. Android布局优化之include、merge、ViewStub的使用

    本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...

  2. 史上最浅显易懂的Git教程!

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  3. 用VS2010开发Android应用的配置方法

    在开发你的第一个Android应用程序之前,你应该先检查一下是否安装了Android SDK,以及是否创建好了Android模拟器(AVD),如果有不清楚的地方,请先看百度这篇文章“Android是什 ...

  4. 05.pathinfo的两种模式与模版和控制器之间的关系

    <?php function dump($data){ echo '<pre>'; var_dump($data); echo '</pre>'; } dump($_SE ...

  5. [连载]JavaScript讲义(04)--- 函数和闭包

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja2ZydWVk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  6. 文件I/O(不带缓冲)之文件共享

    UNIX系统支持在不同进程间共享打开的文件. 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. (1)每个进程在进程表中都有一个记录项,记录项 ...

  7. 项目源码--Android本地音乐播放器

    下载源码 技术要点: 1.本地音乐播放与管理 2.支持在线下载 3.非库音频流的解码 4. UI控件的综合使用 5. HTTP通信模块 6. Mysql数据库的综合使用 7. 后台服务技术 8. 源码 ...

  8. ie提示jquer缺少标识符,字符串或数字

    属性之间是要用","分隔的,但最后一个属性的后面在IE中是不能有的,firefox可有可无. 至于最后的";"是另外一回事了.这是Javascript的语法问题 ...

  9. 解决ajax回调函数无返回值得问题

    这里以编辑验证角色名为例: 首先,定义一个flag全局变量. 然后,在回调函数resp()中根据判断将flag的值设为true或false. 最后,在调用函数ckrname()中,return fla ...

  10. Hill Climber and Random Walk