美文网首页
swift - 登录界面视频背景

swift - 登录界面视频背景

作者: AliceJordan | 来源:发表于2018-01-20 11:40 被阅读0次

    假期来学习一下swift,今天学的是视频背景,视频背景就是QQ那个登录时出现的那个小视频,由于我并没有找到那个视频,所以自己拿了一个过来。这个是刚刚学习swift有很多地方不了解 希望大家给与帮助。 

    gayHub:https://github.com/AkaShark/swift--

    邮箱:1548742234@qq.com 好了接下来开始正题了~

    这个小小的例子分为三个部分首先是第一部分

    第一部分:

    对于视频的处理

     open  func  compressVideoWithUrl(videoUrl url:URL, startTime:CGFloat, duration:CGFloat, completion: ((_videoPath:URL,_  error:NSError?)->Void)? ){

        DispatchQueue.global().async {

            //获取多媒体的信息

            letasset =AVURLAsset(url:url)

            //AVAssetExportPresetHighestQuality  压缩的质量 压缩视频

            letexportSession =AVAssetExportSession(asset: asset, presetName:"AVAssetExportPresetHighestQuality")

            //获取沙盒路径

            let paths: NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray

            //获取路径

            varoutputUrl = paths.object(at:0)as!String

            //定义文件管理

            letmanager =FileManager.default

            //获取完整的视频路径

            outputUrl = outputUrl.convert.appending("/output.mp4")

            do

            {

                //将原文件删除

                trymanager.removeItem(atPath: outputUrl)

            }

            catch_

            {

            }

            //如果原文件删除了

            if!manager.fileExists(atPath: outputUrl)

            {

                ifletexportSession = exportSessionasAVAssetExportSession?{

                    //将压缩的视频文件存到原目录下

                    exportSession.outputURL=URL(fileURLWithPath: outputUrl)

                    //进行优化网络使用 方便快速启动 快速启动

                    exportSession.shouldOptimizeForNetworkUse=true

                    //导出类型

                    exportSession.outputFileType=AVFileType.mp4

                    //CMTimeMakeWithSeconds(a,b) a当前时间,b每秒钟多少帧

                    //CMTimeMakeWithSeconds 专门是为视频设计的时间

                    letstart =CMTimeMakeWithSeconds(Float64(startTime),600)

                    letduration =CMTimeMakeWithSeconds(Float64(duration),600)

                    print(duration)

                    letrange =CMTimeRangeMake(start,duration)

                    exportSession.timeRange= range

    //                异步导出

                    exportSession.exportAsynchronously

                        {

                            //导出的状态

                        switchexportSession.status{

                            //完成

                        caseAVAssetExportSessionStatus.completed:

                            completion?(exportSession.outputURL!,nil)

                            //失败

                        caseAVAssetExportSessionStatus.failed:

                            print("Failed: \(exportSession.error)")

    //                    取消

                        case

                        AVAssetExportSessionStatus.cancelled:

                            print("Failed:\(exportSession.error)")

                        default:

                            print("default case")                    }

                    }

                }

            }

        }

        }

    }

    自定义一个方法获取视频的本地地址和视频的一些相关的信息,对视频进行压缩处理使得视频可以更好的播放

    第二部分- 定义基类VC

    定义了AVPlayerViewController和他的一些默认属性(如播放的填充模式,是否循环播放等)作为基类使用的时候只需要继承和简单的配置就可以了

     fileprivatefuncsetMoviePlayerView(_url:URL){

           letvideoCutter =VideoCutter()

            videoCutter.compressVideoWithUrl(videoUrl: url, startTime:startTime, duration:duration) { (path, error)in

                ifletvideoPath = pathasURL?{

                    self.moviePlayer.player=AVPlayer(url: videoPath)

                    self.moviePlayer.player?.play()

                    //设置player的音量为 将self.moviePlayerSoundLevel转为float类型

                    self.moviePlayer.player?.volume = Float(self.moviePlayerSoundLevel)

                }

            }

        }

        //生命周期

        overridefuncviewDidLoad() {

            super.viewDidLoad()

            moviePlayer.view.frame  =view.frame

            moviePlayer.showsPlaybackControls = false

            view.addSubview(moviePlayer.view)

            //将moviePlayer.view放在最后

            view.sendSubview(toBack:moviePlayer.view)

            // Do any additional setup after loading the view.

        }

    第三部分-直接调用

    调用很容易,直接写出简单的属性设置,添加到view上就ok了

       //在沙盒中寻找视频位置

            leturl =URL(fileURLWithPath:Bundle.main.path(forResource:"moments", ofType:"mp4")!)

            //设置

            videoFrame=view.frame

            fillMode = .resizeAspectFill

            alwaysRepeat = true

            sound=  true

            startTime=2.0

            alpha=0.8

            contentURL= url

            //交互关闭

            view.isUserInteractionEnabled = false

    刚刚学习swift 感觉好挺好的 和oc 对比起来真的感觉简略了很多啊。

    感觉自己的东西写的一直不怎么好也再尝试着去写好。更加努力坚持吧。

    相关文章

      网友评论

          本文标题:swift - 登录界面视频背景

          本文链接:https://www.haomeiwen.com/subject/uibeoxtx.html