第五篇、Uber用视频播放做启动动画
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用视频播放做启动动画的更多相关文章
- 第六十五篇、OC_iOS7 自定义转场动画push pop
自定义转场动画,在iOS7及以上的版本才开始出现的,在一些应用中,我们常常需要定制自定义的的跳转动画 1.遵守协议:<UIViewControllerAnimatedTransitioning& ...
- Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子
需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- 第五篇 Replication:事务复制-How it works
本篇文章是SQL Server Replication系列的第五篇,详细内容请参考原文. 这一系列包含SQL Server事务复制和合并复制的详细内容,从理解基本术语和设置复制的方法,到描述它是如何工 ...
- 第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- 第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
- 【译】第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
随机推荐
- [置顶] 《Windows编程零基础》__2 一个完整的程序
Windows开发的常识 1)窗口 Windows中最基本的概念也许就是窗口了,每一个前台程序都至少有一个窗口,一个窗口也是你可以看到的部分,比如,QQ有如下的登录窗口 基本上你在Windows中可见 ...
- 深入浅出之Smarty模板引擎工作机制(一)
深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...
- flex-mp3
Mp3Player.as package ddw.adobe { import flash.events.Event; import flash.events.IOErrorEvent; import ...
- Android开发学习之 定制界面风格
统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...
- iOS开发——动画篇Swift篇&动画效果的实现
Swift - 动画效果的实现 在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimation ...
- win7家庭版任务栏预览消失,只显文字终极解决法
出现问题:win7家庭基础版,任务栏的预览窗口没有了,只有文字: Likethis: 工具/原料 services.msc 方法/步骤 网上的解决办法都试了,不管用,先把网上的方法列举出来如下 ...
- c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
- 如何判断一个数是否为素数(zt)
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){ if (n<2) { //小于2的数即不是合数也不是素数 throw 0; ...
- css预处理的引入与问题
css的预处理越来越流行.sass,less,stylus这几个都使用方便. 我想使用他的原因,暂时最主要是为了@import的功能.现在的问题:因为产品太多,是个页面,有10个css.而这10个cs ...
- PostgreSQL解决"Abc_de_fghijkl_mn" 首字母小写去掉下划线并且下划线后面的第一个字母大写或首字母大写去掉下划线并且下划线后面的首字母大写的js
select "lower"(substr('Abc_de_fghijkl_mn', 1, 1)) || substr(replace(REGEXP_REPLACE(INITCAP ...