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. Tomcat7中配置Oracle 11g数据库DBCP连接池

    将       ojdbc6.jar       tomcat-jdbc-7.0.37.jar            拷贝到工程的WEB-INF\lib  下面 一.在Tomcat的配置文件Tomca ...

  2. 【灵感】wifi通过wifi发送优惠信息

    1.[灵感]wifi通过wifi发送优惠信息 http://content.businessvalue.com.cn/post/15362.html 2.手机彩票大爆发 http://content. ...

  3. Chrome插件开发 尝试2

    在文章1中 尝试了开发chrome一个蛋疼的插件,而且必须要写 一坨令人费解的代码才能只能,今天来次清爽的开发:如图: 这是 "清爽模式" →_→ 我把popup.html与pop ...

  4. zoj3672 Gao The Sequence

    原地踏步了半年,感觉一切都陌生了~ 题意:a[i]-一个任意的数,这个数要等于a[1]~a[i-1]每个数减去任意一个数,经过多次这样的变换到达目标b序列,能到达就yes不能到达距no. 一开始各种分 ...

  5. [Javascript] Either Functor

    Either Functor: // API Right(val) // resolve the value Left(val) // return error message Examples: m ...

  6. 为CentOS 加入�本地源

    首先把光盘中的Packages文件夹复制到本地. [arm@Jarvis Packages]$ pwd /home/Packages 安装用于创建安装包依赖关系的软件createrepo. [arm@ ...

  7. Swift3.0相对于2.3语法的一些变化

    前言 : Swift3.0的Swift的第3个主要版本,目标是安全,快速和有表现力,也是第一个有开源社区参与开发的Swift版本.由于语法和API改动比较多,Xcode 8.0 Beta提供了migr ...

  8. 判断文件是否为UTF8编码

    utf8的规则比较简单: 对于UTF-8编码中的任意字节B,如果B的第一位为0,则B为ASCII码,并且B独立的表示一个字符; 如果B的第一位为1,第二位为0,则B为一个非ASCII字符(该字符由多个 ...

  9. vim中taglist使用

    转载:http://www.cnblogs.com/mo-beifeng/archive/2011/11/22/2259356.html 本节所用命令的帮助入口: :help helptags :he ...

  10. Android(java)学习笔记104:Map集合的遍历之键找值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...