首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有全屏控件的UIView中的Swift 5循环MP4

是指在Swift 5编程语言中,通过在一个UIView中嵌入一个MP4视频,并实现全屏控件的功能,使视频可以循环播放。

在Swift 5中,可以使用AVPlayer和AVPlayerLayer来实现视频播放功能。首先,需要导入AVFoundation框架,并创建一个AVPlayer对象来管理视频播放。然后,将AVPlayer对象与AVPlayerLayer关联,并将AVPlayerLayer添加到UIView的layer中,以显示视频内容。

以下是一个示例代码,演示如何在UIView中循环播放MP4视频:

代码语言:txt
复制
import AVFoundation
import AVKit

class VideoPlayerView: UIView {
    private var player: AVPlayer?
    private var playerLayer: AVPlayerLayer?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupPlayer()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupPlayer()
    }
    
    private func setupPlayer() {
        guard let videoURL = Bundle.main.url(forResource: "video", withExtension: "mp4") else {
            return
        }
        
        player = AVPlayer(url: videoURL)
        player?.actionAtItemEnd = .none
        
        playerLayer = AVPlayerLayer(player: player)
        playerLayer?.videoGravity = .resizeAspectFill
        playerLayer?.frame = bounds
        
        layer.addSublayer(playerLayer!)
        
        NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd), name: .AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
    }
    
    @objc private func playerItemDidReachEnd() {
        player?.seek(to: CMTime.zero)
        player?.play()
    }
    
    func play() {
        player?.play()
    }
    
    func pause() {
        player?.pause()
    }
    
    func stop() {
        player?.pause()
        player?.seek(to: CMTime.zero)
    }
}

在上述代码中,首先在setupPlayer()方法中,通过Bundle.main.url(forResource: "video", withExtension: "mp4")获取到MP4视频的URL。然后,创建AVPlayer对象并将其与AVPlayerLayer关联,最后将AVPlayerLayer添加到UIView的layer中。

为了实现循环播放,我们通过添加一个观察者来监听AVPlayerItemDidPlayToEndTime通知,并在收到通知时将播放器的当前时间设置为0,并重新播放视频。

使用该自定义的VideoPlayerView,你可以在你的视图控制器中创建一个实例,并将其添加到视图层次结构中。然后,你可以调用play()方法来开始播放视频,调用pause()方法来暂停视频,调用stop()方法来停止视频并将播放器的当前时间设置为0。

这是一个简单的示例,你可以根据自己的需求进行扩展和定制。如果你想了解更多关于AVFoundation框架的信息,可以参考腾讯云的产品介绍链接:AVFoundation

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

接着看下写作环境: Swift 5, iOS 14, Xcode 12 下面就是正文了。 你已经在 iOS 应用程序上工作了一段时间,你认为你很聪明。 你以为你已经做到了,嗯?...在本教程,您将学习如何: 添加本地视频。 添加流媒体视频。 启用播放控件。 实现循环。 实现画中画。...不幸是,这对您没有帮助! 您想要循环播放所有这些视频。 看起来您必须以手动方式做事。 您需要做就是跟踪您播放器和当前播放项目。 当它到达最后一个视频时,您将再次将所有剪辑添加到队列。...这里所有都是它! 构建并运行以查看您剪辑无限循环。 4. Playing with Player Controls 接下来,是时候添加一些控件了。 你任务是: 1) 单击时取消视频静音。...再次构建并运行,您将能够点击和双击来播放剪辑速度和音量。 这表明添加自定义控件以与自定义视频视图交互是多么容易。 现在,您只需轻按一下即可提高音量并进入快播状态。 5.

6.9K10
  • iOS开发常用之网络

    MBXPageViewController - 简洁快速页面切换--MBXPageViewController,带有按钮控件UIPageController,非常整洁,简单以及快速。...MediumScrollFullScreen - Medium可扩展滚动页面,上下滚动时,全屏显示内容,并自然消隐上下菜单。...LayoutTrait - swift一个小类库。做iPad多任务分屏适配同学可以看一下。 HACursor - HACursor,是一个对横向ScrollView视图进行管理UI控件。...此库支持iOS5 .0以上版本(另外:Nav标题滑动不明显,本人写了2个类似的控件),SloppySwiper-demo :代码方式与storyboard方式。...BuildAnInfiniteCarousel - 自己动手造无限循环图片轮播,教程。 iCarousel - iCarousel是一个类,它继承于UIView

    23.6K10

    iOS 面向协议封装全屏旋转功能

    本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~ 如果对面向协议有疑问同学可以看下我之前两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程...LXFProtocolTool/FullScreenable' 一、配置 若项目支持横屏(Landscape)则跳过此配置步骤 若项目只支持竖屏(Portrait)的话需要在AppDelegate实现如下方法...是否进入全屏 specifiedView UIView? 指定即将全屏视图 superView UIView?...进入/退出 全屏回调 当switchFullScreen调用者为UIView时,如果specifiedView为nil会自动填写,superView也是如此 switchFullScreen...,除了本文提及全屏旋转功能外还有其它实用功能封装,具体内容可以到 Wiki首页 查找。

    1K60

    16道面试官必问你必须会iOS面试题

    这个理解是错误,Storyboard 拖出来控件即使是 strong ,也不会有循环引用问题。...UI 控件并不会持有别的对象,所以,不管是手写代码还是 Storyboard,UI 控件是 strong 都不会有循环引用。...将 nextLevel 赋值给 level,重复第 3 步判断。 将 ans 节点换成节点值,返回结果。 因为我们是用 Swift 来实现代码,所以我使用了一些 Swift 语言特性。...例如: 输入: (2 -> 4 -> 1) + (5 -> 6 -> 1)输出: 7 -> 0 -> 3 本题 Swift 代码模版如下: private class ListNode {...但是这个算法会有一个问题:它会产生内存碎片,所以它一般还会带有整理内存碎片逻辑,在算法叫做 Compact。如何整理呢?

    2.6K50

    iOS动画系列之六:利用CABasic Animation完成带动画特效登录界面1. 画风突变笑脸2. 心跳3. iOS实践:实现一个带动效登录界面

    我们所写所有的动画都是在block编写。 通常在block里面我们为了避免造成循环引用,都使用weakSelf替代self进行修饰。...3,在登录界面的viewWillAppear方法,先把两个输入框还有按钮位置都修改了,不然做动画时候咱们才能让这些控件移动到正确位置上嘛。 4,在viewDidAppear方法,实现动画。...把两个输入框位置放到正确地方,同时让登录按钮显示出来。 5,实现登录按钮点击事件:这里模拟是登录失败状况,按钮会进行晃动。...3.3 需要注意一些小地方 1,为了能够有一个相对舒服一点视觉效果,对导航栏进行了隐藏。 2,修改了电池栏颜色,能让全屏时候看起来舒服一点。默认情况下,系统电池栏颜色都是黑色。...不让在动画播放过程可以不停点击登录按钮,如果动画播放时间比较长,这个动画时间是会累加?。

    1.6K60

    fscanf读取一行字符串-C带有fscanf无延迟循环

    C带有fscanf无延迟循环   c   C带有fscanf无延迟循环,c,C,您好,我在使用fscanf读取二进制文件时遇到问题,值没有被存储,而循环是无限这是我密码int main(...= EOF   您好,我在使用fscanf读取二进制文件时遇到问题,值没有被存储fscanf读取一行字符串,而循环是无限   这是我密码    int main(){ FILE...然而,由于下一个输入函数再次查找数字文本,因此循环重复-无限循环   当然,使用fscanf读取.bin文件并不像预期那样基于文本,代码在尝试读取数字文本时被卡住了   对于二进制文件,我希望:   ...请查看并阅读有关返回值部分。事实上,你应该把整件事都读一遍。但正如pmg所说,您不想将其用于二进制文件。我也有点惊讶它没有出现fscanf读取一行字符串,因为您没有传递临时变量地址。...当fscanf无法转换%d格式之一输入并且它卡在输入缓冲区时,您代码会怎么做EOF不是您应该检查内容,而是==3。

    1.7K30

    iOS视频功能模块开发 原

    UIView *view; 播放器view,在使用之前,必须设置frame大小,然后将其添加在我们UI视图上 @property (nonatomic, readonly) UIView *backgroundView...,参数枚举如下,生成缩略图数据回调在后面的通知详说: typedef NS_ENUM(NSInteger, MPMovieTimeOption) {     MPMovieTimeOptionNearestKeyFrame...; 将要进入全屏模式时发送通知 NSString * const MPMoviePlayerDidEnterFullscreenNotification; 已经进入全屏时发送通知 NSString...; 已经退出全屏时发送通知 NSString * const MPMoviePlayerThumbnailImageRequestDidFinishNotification; 获取缩略图完成时发送通知...MPMoviePlayerViewController将视图封装在了一起,其中有一个成员对象是MPMoviePlayerController类型,类似C++has-a逻辑,我们只需要对MPMoviePlayerViewController

    1.1K70

    Ios常用第三方动画框架(三)

    ADo_GuideView - 转动用户引导页(模仿网易bobo) 因为没有从app包里抓到@3x图片,建议在iPhone5模拟器运行,保证效果~ (版本新特性、导航页、引导页)。...支持iOS 5.0+ ARC,气泡能够带有数字标识,同时支持消失block方法。消失时还带有消失效果动画。 GiftCard-iOS - 礼品卡购买炫酷动画。...BuildAnInfiniteCarousel - 自己动手造无限循环图片轮播,教程。 iCarousel - iCarousel是一个类,它继承于UIView。...CardsAnimationDemo - swift,《使用 UICollectionView 实现一个卡片动画》不是直接操作所有 UIView 和 CALayer transform3D 属性来实现整个效果...DynamicButton.swift - 一套完整、且带动画过渡图标按钮库。 TKDotSegment.swift - 是一个带有圆点动画 segment。

    9.1K30

    spring(5) - Bean实例化,对循环依赖处理

    并将 singletonFactories 属性引用移出掉了,这两个属性是什么意思呢?...3 应用三层缓存对循环依赖处理举例 如果 A,B 两个类互相依赖,且需要实例化,当只有一层缓存 singletonObjects 时候,A 实例化调用B,B实例化调用A,就无法结束了; 此时加一层缓存...earlySingletonObjects ,用于存储还未完成初始化实例,但是已经完成了创建,在创建A时候,发现需要创建B,就去创建B,找B时候一次从 第一级缓存,二级缓存,三级缓存找, 最后在三级缓存...singletonFactories中找到其工厂,直接创建B 未初始化实例放到二级缓存,并将三级缓存B工厂清除,然后返回继续实例化A,因为从二级缓存中找到了B未初始化引用,得以继续完成实例化A...,当需要继续初始化B时,再将A完整实例引用从一级缓存给到B实例,这样就完成了循环依赖实例化; 根本原理是 从JVM层面,将实例化分成了 声明, 初始化 两个阶段,(也就是分层思想),在一层无法解决时候

    70320

    iOS-视频播放器简单封装

    CLAVPlayerView结构 CLAVPlayerView布局很简单,重点在于约束添加和控件层次关系,添加约束只要自己挨个细心添加就没有问题,需要注意控件层次关系,从上图中可以看出四个控件是分先后顺序平行添加在...工具条显示与隐藏 在播放状态时,当点击imageView,就会弹出底部工具条,可以查看当前播放时间,视频总时间或进行暂停视频、全屏播放等操作。如果没有操作,工具栏会在5秒之后自动隐藏。...添加定时器,5秒钟之后隐藏底部工具条,并提供移除定时器方法。...重播按钮和全屏播放按钮实现 在定时器每秒调用更新Slider方法判断当视频播放完毕之后,显示遮盖View,而重播按钮实现,其实就是将Slidervalue置为0并重新调用点击Slider松开时方法...全屏播放需要控制器Moda出一个全屏播放控制器进行全屏播放,创建全屏播放控制器CLFullViewController,并使其支持左右方向旋转,Moda出CLFullViewController

    1.9K110

    iOS小技能:下拉刷新控件适配

    前言 下拉顶部背景色设置: 往tableView控件添加拉伸背景视图 present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式UIModalPresentationFullScreen...iOS13适配【灵活控制模态展示视图样式】(全屏/下滑返回)文中提供完整demo源码 全局hook presentViewController方法 // // UIViewController+ERPPresent13...spm=1001.2014.3001.5501 问题:没有上拉时候加载更多控件文案也显示出来了 修复方式1:修改视图距离底部高度 [self.vcView mas_makeConstraints...- 0); make.top.equalTo(weakSelf.view).offset(0); if(isHasSafeAreaInsets()){// 避免没有上拉时候加载更多控件文案也显示出来了...make.bottom.equalTo(weakSelf.view); } }]; 修复方式2:修改上拉加载控件距离底部高度

    88930

    Swift| 基础语法(二)

    前言 总结下 swift基础语法,里面涉及到:常量&变量、Swift数据类型、逻辑分支、循环、字符串相关、数组和字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift...本文涉及: 常量&变量 Swift数据类型 逻辑分支 循环 ---- 一、常量&变量 什么是常量和变量 在Swift规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用var...全局变量/局部变量 var p1 = Point(x: 1, y: 2) 二、Swift数据类型 Swift数据类型也有:整型/浮点型/对象类型/结构体/元组类型等等 先了解整型和浮点型 1、整型...元组 元组是Swift特有的,OC没有元组相关类型。...a : b print(result) 3、guard使用 guard是Swift2.0新增语法 它与if语句非常类似,它设计目的是提高程序可读性 guard语句必须带有else语句,它语法如下

    77420

    iOS从Xib设置样式

    command + control + ⬆ 或command + control + ⬇会帮我搞定一切. view位置 添加约束时候,谁说控件A要放在控件B下侧才能设置到A到B在y轴方向上距离?...试试看选中A控件, 按住control键同时把A往B身上拖,直到B发亮再松手. 如果没用过这招, 肯定惊喜....,当然能最大限度使用xib可自定义属性当然是极好,下面就说一下一些不常用从xib可设置属性 这些属性设置在右面设置菜单第三个选项卡User Defined Runtime Attributes...Xcode 6以上支持一种新方法,特好用 其实就是为UIView添加扩展 或 继承 添加IBInspectable属性 既可以图形化设置某些属性 这样在右侧第四个选项卡神奇出现了自定义设置项...下实现方式(扩展) UIView+Border&CornerRadius.swift import Foundation import UIKit extension UIView {

    2.3K20

    videojs播放器插件使用详解

    RTMP协议一般传输是flv,f4v格式流,RTSP协议一般传输是ts,mp4格式流。HTTP没有特定流。...(2019.09.23) 在iPhone设备上播放视频时(微信浏览器上也会有这个问题)会自动全屏,这里全屏并不是常规手机横屏那种全屏,而是类似于一个modal弹窗全屏,解决办法就是在video标签添加...有关Video.js插件更多信息,请参阅插件指南。 sources 类型: Array 一组对象,它们反映了本机元素具有一系列子元素能力。这应该是带有src和type属性对象数组。...例如,要禁用全屏控件: videojs('my-player', { controlBar: { fullscreenToggle: false } }); 技术选择 ${techName...类型: boolean 只有技术支持Html5,此选项可以设置true为强制触摸设备本机控件

    52.7K117
    领券