第五篇、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=0; index<=67;index++ {
            imageName = "logo-" + String(format: "%03d", index)
            image = UIImage(named: imageName!)

            images.insert(image!, atIndex: index)
        }

        backImageView?.animationImages = images
        backImageView?.animationRepeatCount = 1
        backImageView?.animationDuration = 5

        backImageView?.startAnimating()

        UIView.animateWithDuration(0.7, delay:5, 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: 0)
        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)
    }
}
时间: 2024-10-14 12:42:36

第五篇、Uber启动视频播放的相关文章

【Python五篇慢慢弹(5)】‘类’过依然继续前行,直至ending再出发

‘类’过依然继续前行,直至ending再出发 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pychar

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

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

Asp.net 处理程序(第五篇)

HttpApplication有19个标准事件,当到达第8个事件PostMapRequestHandler触发的时候,标志着已经获取到了处理请求的处理程序对象,在第11个事件PreRequestHandlerExecute之后,HttpApplication将执行这个处理程序. 问题: HttpApplication如何选择处理程序? 处理程序是什么对象? HttpApplication如何得到这个处理程序对象? 一.处理程序 针对不同的请求,Asp.net要有不同的处理,在Asp.net中通过

iOS开发UI篇—程序启动原理和UIApplication

iOS开发UI篇-程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对

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

本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学习如何给主体访问一组对象,通过给架构分配权限而不是单个表.代码模块和其他对象.你还会了解用户架构分离的好处,以及如何提高对象安全性,如何为用户.组使用默认架构来简化对象访问管理和安全性.Schemas with Roles and PermissionsThe relationship of sch

nginx之旅(第五篇):URL重写介绍、URL重写场景、URL重写语法

nginx之旅(第五篇):URL重写 一.URL重写介绍 URL重写是指将一个URL请求重新写成网站可以处理的另一个URL的过程.这样说可能不是很好理解,举个例子来说明一下,在开发中可能经常遇到这样的需求,比如通过浏览器请求的http://localhost:8080/getUser?id=1,但是需要通过SEO优化等等原因,需要把请求的地址重写为http://localhost:8080/getUser/1这样的URL,从而符合需求或者更好的被网站阅读. 当遇到这种请求的时候,就需要使用到Ur

秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段.事件.互斥量.信号量进行了总结.有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题.因此本文将对事件和信号量作个试验,看看事件和信号量能否处理“遗弃”问题. 一.

前端工程师技能之photoshop巧用系列第五篇——雪碧图

显示目录 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇--雪碧图 定义 css雪碧图(sprite)是一种网页图片应用处理方式,它允许将一个页面涉及到的所有零星图片都包含到一张大图中.使用雪碧图的处理方式可以实现两个优点: [1]减少http请求次数 [2]减少图片大小,提升网页加载速度 (多张图片加载速度小于拼合成的图片的加载速度) 凡事都不完美,实现优点的同时也带来了缺点,即提

Python之路【第十五篇】:Web框架

Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8   import socket   def handle_request(client):     buf = client.recv(10