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

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

启用播放控件。 实现循环。 实现画中画。 下载好材料打开 TravelVlogs.xcodeproj 并转到 VideoFeedView.swift。 注意:视频可能无法在模拟器中播放。...3) VideoPlayer 是一个方便的 SwiftUI 视图,需要播放器对象才能发挥作用。 您可以使用它来播放视频。 4) 默认情况SwiftUI 视图考虑设备的安全区域。...该层恰好用您通过其player属性提供的视频中的帧填充其内容。 问题是你不能直接在 SwiftUI 中使用这个层。 毕竟 SwiftUI 没有 CALayer的概念。 为此,您需要回到 UIKit。...作为一个体贴的应用程序开发人员,您应该允许用户关闭他们自己的音乐,而不是大胆地假设您的应用程序应该胜过所有其他应用程序。...您会在左上角看到画中画按钮……否则不会! 缺点是,在撰写本文时,iOS 14.5是可用的最新版本,VideoPlayer 的 SwiftUI 视图未显示画中画按钮

6.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

AVKit框架详细解析(二) —— 基于视频播放器的画中画实现(一)

接着看下写作环境: Swift 5, iOS 14, Xcode 12 下面就是正文了。 如今,用户希望能够使用Picture in Picture (PiP) - 画中画播放视频。...PiP 模式将视频内容最小化到一个小窗口中,允许用户进行多任务处理。 在本教程中,您将学习如何向使用 UIKit 构建的现有视频应用程序添加画中画支持。...---- Adding Background Modes 要在您的应用程序中启用画中画功能,您需要添加Background Modes功能。...stopPictureInPicture() 当用户点击适当的按钮时,这些方法告诉画中画控制器启动或停止画中画。...Handling PiP controller failure and closing 当用户使用关闭按钮关闭画中画画中画模式失败时,您需要从活动控制器集中删除自定义播放器控制器。

2.7K10

架构之路 (五) —— VIPER架构模式(一)

开始 首先看下主要内容: 在本教程中,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...它将允许用户通过向一条路线添加路径点来构建公路旅行。在此过程中,您还将了解您的iOS项目中的SwiftUI和Combine。 打开启动项目。...当将用户操作发送回数据模型时,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新的旅程。...TripListView_Previews中修改return,如下所示: return NavigationView { TripListView(presenter: presenter) } 这允许您在预览模式查看导航栏...List中的一个项目中,将自动启用滑动操作来删除行为。

17.4K10

如何使用 SwiftUI 中新地图框架 MapKit

前言 了解 iOS 17 中的 MapKit 后,我们会发现 Apple 引入了更适合 SwiftUI 的 API。...在 iOS 17 中,MapKit 为 SwiftUI 引入了需要 MapContentBuilder 参数的地图初始化器。下面为大家介绍一MapKit 相关的基础知识。...地图交互 为了控制用户与地图的交互方式,可以传递一组允许的模式。...例如,在用户移动位置后,要在 toolbar 中添加一个按钮,以将地图重置为初始位置,代码如下: Map(position: $position) { ... } .toolbar { ToolbarItem...通过引入 MapContentBuilder 和其他新的初始化器,可以更方便地创建交互式地图视图,添加标记、注释和自定义内容,并在用户移动地图相机时自动更新位置。

46220

iOS新的视频开发框架AVPlayerViewContoller与画中画技术

iOS新的视频开发框架AVPlayerViewContoller与画中画技术 一、引言         前面有一篇博客探讨了iOS中视频播放的开发相关类和方法,那篇博客中主要讲解的是MeidaPlayer...iOS9系统后,iPad Air正式开始支持多任务与画中画的分屏功能,所谓画中画,即是用户可以将当前播放的视频缩小放在屏幕上同时进行其他应用程序的使用。这个革命性的功能将极大的方便用户的使用。...(9_0); 三、画中画编程技术应用         AVPlayerViewController是默认支持画中画操作的,如上图所示,视频的播放界面右下角出现一个画中画按钮,点击这个按钮当前播放的视频界面会缩小显示在屏幕角落...两指的捏合操作可以将缩小的视频播放窗口进行任意尺寸的放大,如果将视频窗口拖进屏幕的边界,视频窗口会被吸进边界,用户可以通过拖拽手势将其拉出,如下图: ?...playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{     return YES; } //用户点击还原按钮

2K40

人生想要开挂,快来学习“画中画”!

何为画中画 首先请允许我介绍画中画”:画中画(英文Picture-in-picture,缩写PiP)是指将一个电视节目(或其他画面)显示在整个画面上,同时将另一个或多个其他画面显示在角落中,通常只播放主窗口的声音...相比chrome,safari在自带的播放控件内加入了画中画模式的按钮。...(不能理解为浏览器是否支持,因为即便浏览器支持的情况用户禁用画中画功能也会返回false) document.pictureInPictureElement 该属性返回当前文档内存在的画中画元素对象...因为一个页面可能会存在多个video,所以需要指定触发画中画的video元素。 ② 那么什么情况API会调用失败? 系统不支持画中画 由于限制性功能策略,不允许document使用画中画。...(例如按钮点击)处理的,此处需要注意像mouseover、mouseenter、mousemove、mouseleave、scroll、onload等事件都不算用户手势事件。

1.6K30

短视频秒开组件、加密画中画等功能让音视频播放更专业!

,为用户提供直播、点播场景下流畅稳定的音视频播放能力,覆盖泛娱乐、电商、教育等多样化音视频业务场景,支持Web/H5、iOS、Android、Flutter平台。...短视频组件通过预播放、预下载、播放器复用和精准流量控制等技术,实现极速首帧、滑动丝滑的优质播放体验,从而提升用户播放量和停留时长。...离线播放画中画:支持本地视频画中画播放,包含普通视频、加密视频等。“秒切”效果:无需点击切换画中画按钮,退后台即可立马启动画中画,实现真正意义的“秒切”。...无法判断用户对于自动画中画的设置权限,需自行引导。...播放之前先设置是否允许“自动切换画中画功能”。

52552

SwiftUI @State @Published @ObservedObject 深入理解和使用

1.SwiftUI 是Apple 新出面向未来、跨多端解决方案、声明式编程 SwiftUI最新版本 2.0 但是需要 IOS 14 支持,多数现在还用的是IOS 13 所以很多不完善的东西都用SwiftUIX...,Swift不允许我们创建可变计算属性,这意味着我们不能编写mutating var body: some View——这是不允许的。...@State允许我们绕过结构体的限制:我们知道不能更改它们的属性,因为结构是固定的,但是@State允许SwiftUI将该值单独存储在可以修改的地方。...@Published + @ObservedObject 介绍 @Published是SwiftUI最有用的包装之一,允许我们创建出能够被自动观察的对象属性,SwiftUI会自动监视这个属性,一旦发生了改变...因为SwiftUI更新数据的前提是触发 第一层 绑定的对象 wrapperModel的属性(字段)发生更新才会调用视图层更新数据 但是 第一次绑定的对象还绑定了 @ObservedObject 或者其他类型的对象呢

3K10

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

但是,SwiftUI 中的一些系统控件并没有完全遵循响应式的设计原则,由此在某些情况会出现严重的错误,影响用户体验,并使开发者无所适从。...然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是在没有屏蔽手势取消 Sheet 的情况。...通过下面的代码,我们可以让用户使用下滑手势来取消 Sheet,同时又不会导致应用锁死。...它的复现条件如下:iOS 16 系统,在真机或模拟器上测试点击视图列表中的按钮,可以进入下一级视图。...为了改善 AttributeGraph 的效率并减少其占用空间,SwiftUI 会在一些特定情况对其进行清理和维护(例如通过 CFRunLoopObserverCreate 监听 Runtime 的空闲时机

589110

掌握 SwiftUI 的 Safe Area

在默认的情况会将用户视图置于安全区之内,因此我们只能得到如下的结果: image-20211120141245282 为了让视图能够突破安全区域的限制,SwiftUI 提供了 ignoresSafeArea...ignoresSafeArea 相较于 SwiftUI 1.0 提供的 edgesIgnoringSafeArea 最大的提升便是允许我们设置 SafeAreaRegions 。...从 iOS 14 开始,SwiftUI 计算视图的安全区域时,将软键盘在屏幕上的覆盖区域(iPadOS ,将软键盘缩小后键盘的覆盖区域将被忽略)也一并进行考虑。...safeAreaInsetList2 遗憾的是,在 iOS 15 之前,SwiftUI 并没有提供调整视图安全区的手段,如果我们想通过 SwiftUI 的手段创建一个自定义 Tabbar 时,列表中最后的内容将被...通过 safeAreaInset,我们可以缩小视图的安全区域,以确保所有内容都可以预期显示。

7.5K31

Chrome 新特性:文档画中画介绍

咱们通过 Gif 来看一: 简单来说,就是把一个网页中 Nuxt Devtool 那一小部分的元素,直接用画中画的方式剥离到了置顶的小窗口中展示。...它扩展了现有的视频画中画(Picture-in-Picture)API,后者仅允许将 HTML 的元素放入画中画窗口中。...通过完整的画中画文档,网站可以提供自定义的控件和输入选项(例如字幕、播放列表、时间轴、视频点赞和踩),来改善用户画中画视频体验。...处理画中画窗口关闭时的情况 通过监听窗口的"pagehide"事件,可以了解画中画窗口何时关闭(无论是因为网站启动还是用户手动关闭)。...像通常在 JavaScript 中那样,创建按钮和控件,并响应用户的输入事件,如"click"。

34160

面向所有人的 UI 编程 :透过点按弹窗初尝 SwiftUI

本文是 SwiftUI 开发教程中的一篇,我们将一起探究上述问题的答案。若你有兴趣学习 iOS 应用程序开发,又或者是想了解 iOS 程序是如何运行的,欢迎关注这一系列文章。...在更新 iOS 13 或者 iPadOS 13 后,你会发现长按许多软件图标都会出现如下弹窗,比如设置内的快捷选项允许你快速更改电池设置等等。...事实上,苹果在今年 WWDC 19 开发者大会中,推荐开发者将应用内弹窗安置在应用程序的方方面面,以保证 iOS 用户体验的一致性。 ?...因为 SwiftUI 的设计思路正是描述性编程语言,你将上面这段话稍微整理一,就是 SiwftUI 的写法。比如下面这段文字就是我整理好的 SwiftUI 代码: ?...在按钮中,我们需要设置两个点:按钮的动作,也就是 action,里面的两行代码会将名言文字复制到剪贴板;另一个点是下面的 HStack ,表示一个水平排列的 View。

2.1K40

TCA - SwiftUI 的救星?(一)

可以说,从 iOS 14 开始,SwiftUI 才算逐渐进入了可用的状态。而最近随着公司的项目彻底抛弃 iOS 13,我也终于可以更多地正式在工作中用上 SwiftUI 了。...view 上的操作 (比如按某个按钮),将会以消息的方式进行发送。...Elm 运行时负责在得到新 Model 后调用 view 函数,渲染出结果 (在 Elm 的语境,就是一个前端 HTML 页面)。用户可以通过它再次发送新的消息,重复上面的循环。...在这里,当用户 “-“ 或 “+” 按钮时,我们发送对应的 CounterAction。选择将 Action 定义为 enum,可以带来更清晰地表达意图。...添加一个 Reset 按钮 除了加和减以外,添加一个重置按钮后将数字复原为 0。 为 Counter 补全所有测试 现在测试中只包含了 .increment 的情况。

3.2K30

干货 | 关于SwiftUI,看这一篇就够了

通过@propertyDelegate的修饰,能够解决不同类型的value进行特定的处理;上述包装的方法,能够建立视图与数据之间的关系,并且会判断在属性值发生变化的情况,通知SwiftUI刷新视图,编译器能够为...用户交互过程中,会产生一个用户的action,从上图可以看出,在SwiftUI中数据的流转过程如下: 该行为触发数据改变,并通过@State数据源进行包装; @State检测到数据变化,触发视图重绘;...SwiftUI内部上述所说的逻辑,判断对应视图是否需要更新UI,最终再次呈现给用户,等待交互; 以上就是SwiftUI的交互流程,其每一个节点之间的数据流转都是单向、独立的,无论应用程序的逻辑变得多么复杂...通过简单的几行代码,设置了按钮的点击事件,样式和文案。...SwiftUI; 虽然SwiftUI优点很多,但是其使用的门槛很高,只能在iOS 13以上的系统使用;仅这点,很多公司和开发者望而却步,目前主流应用最低支持iOS 9,至少3年之内,SwiftUI只能作为一个理论的知识储备

5.8K10

Android开发笔记(一百六十七)Android8.0的画中画模式

开发笔记(一百五十九)Android7.0的分屏模式》介绍了Android7.0的多窗口特性,但是这个分屏的区域是固定的,要么在屏幕的上半部分,要么在屏幕的下半部分,不但尺寸无法调整而且还不能拖动,使得它的用户体验不够完美...经过前面的学习,大家知道Activity默认是支持分屏模式的,当然开发者要给activity节点添加下面的属性描述,从而声明允许分屏也是可以的: android:resizeableActivity...通过重载该方法,应用可以实时收到画中画与全屏的切换通知,并在此控制控件的展示。...下任务键并点击“分屏模式”按钮,接着把App拖到分屏区域,即可实现分屏模式的切换。然而系统却没提供“画中画模式”之类的按钮,就无法在桌面把应用拖入画中画,只能在App内部通过代码切到画中画模式。...然后点击“进入画中画模式”按钮,此时整个页面缩小成屏幕右下角的一块矩形窗口,将该视频窗口拖动到屏幕上方,可见如下图所示悬浮窗效果。 ?

2.2K30

自定义 Button 的外观和交互行为

相较于 UIKit ,SwiftUI 通过 Button 视图,让开发者以少量的代码便可完成按钮的创建工作。...Button(action: signIn) { Text("Sign In")}多数情况,开发者通过为 Button 的 label 参数提供不同的视图来定制按钮的外观。...假如,我们想达成与 TapGesture 类似的效果( 可撤销按钮 ),则可以通过 SwiftUI 提供的另一个协议 PrimitiveButtonStyle 来实现。...默认情况,即使单元格的视图中包含了多个按钮SwiftUI 也只会将 List 的单元格视作一个按钮( 点击后同时调用所有按钮的操作 )。...Trigger在 SwiftUI 中,为了判断某个按钮是否被( 尤其是系统按钮 ),我们通常会通过设置并行手势来添加 trigger :EditButton() .buttonStyle(.

3.7K60

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

但是,SwiftUI 中的一些系统控件并没有完全遵循响应式的设计原则,由此在某些情况会出现严重的错误,影响用户体验,并使开发者无所适从。...然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是在没有屏蔽手势取消 Sheet 的情况。...通过下面的代码,我们可以让用户使用下滑手势来取消 Sheet,同时又不会导致应用锁死。...它的复现条件如下: iOS 16 系统,在真机或模拟器上测试 点击视图列表中的按钮,可以进入下一级视图。...为了改善 AttributeGraph 的效率并减少其占用空间,SwiftUI 会在一些特定情况对其进行清理和维护(例如通过 CFRunLoopObserverCreate 监听 Runtime 的空闲时机

26720

解析SwiftUI布局细节(二)循环轮播+复杂布局

这篇我们还是说我们关于SwiftUI的东西,再提一Demo代码我已经提交上Git了,目前Demo进度为一级页面基本上结束,地图点击大头针的添加也刚处理完,代码有需要的小伙伴可以去Git看看,项目地址...GeometryReader 的主要作用就是能够获取到父View建议的尺寸,这就是它的主要作用,要没有它我们面临的可能就是无休止的传值了,SwiftUI 既然是声明式的UI,我的理解你就没有办法去获取某一个视图的父视图之类的...有一个还得说明一,GeometryReader 改变了它显示内容的方式。在 iOS 13.5 中,内容放置方式为 .center。在 iOS 14.0 中则为:.topLeading。...的方式去实现,很多同行有说目前来看SwiftUI的List在数据量大的情况性能不是特别好,采用ScrollView是个不错的方式,而且也很容易构建出来,并不是说每一个Item的位置都需要你去计算,...监听处理的,所有通过 publish 创建的都是可以通过 onReceive 监听的。

11.8K20
领券