gpt4 book ai didi

swift - 动画视频 UIView 像 YouTube 应用程序一样全屏显示

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:08 25 4
gpt4 key购买 nike

我有一个 View Controller ,它有一个 UIView,我称之为 playerView。在 playerView 中,我使用 AVLayerAVPlayerLayer 向用户显示视频。当您第一次点击任何视频时,对 Youtube 应用程序进行成像。

如何操作此 playerView 的框架,使其占据整个屏幕。 (进入全屏)

这是当前帧:

 //16 x 9 is the aspect ratio of all HD videos
let height = view.frame.width * 9 / 16
let playerFrame = CGRect(x: 0, y: 0, width: view.frame.width, height: height)
playerView.frame = videoPlayerFrame

我在 YouTube 应用程序中进行测试,由于全屏视频的动画效果,他们的应用程序仅支持纵向(就像我的一样)。当用户水平握住设备时,我如何才能通过点击按钮甚至更远的距离来做到这一点?

UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

self.playerView.frame = ?

}, completion: nil)

编辑:试过这个但它并没有真正按照我想要的方式工作......它没有占据整个屏幕

UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

self.playerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.height, height: self.view.frame.width)
self.playerView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))

}, completion: nil)

最佳答案

我想通了。

我创建了一个名为 isExpanded 的全局变量,当我们处于全屏模式时该变量将被设置为 true。此外,我创建了一个名为 videoPlayerViewCenter 的 CGPoint 变量,这样我就可以在全屏之前保存中心,这样我就可以在返回小屏幕时再次设置它。

这是当用户想要全屏时调用的代码

func fullScreenTapped(sender: vVideoPlayer) {

if !isExpanded {
//Expand the video
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

self.videoPlayerViewCenter = self.videoPlayerView.center

self.videoPlayerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.height, height: self.view.frame.width)
self.videoPlayerView.center = self.view.center
self.videoPlayerView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
self.videoPlayerView.layoutSubviews()

}, completion: nil)
} else {
//Shrink the video again

UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

//16 x 9 is the aspect ratio of all HD videos

self.videoPlayerView.transform = CGAffineTransform.identity
self.videoPlayerView.center = self.videoPlayerViewCenter

let height = self.view.frame.width * 9 / 16
let videoPlayerFrame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: height)
self.videoPlayerView.frame = videoPlayerFrame

self.videoPlayerView.layoutSubviews()

}, completion: nil)
}

isExpanded = !isExpanded
}

为了展开视频,我将中心保存在我的全局 CGPoint 变量中,然后设置帧。然后,我设置中心并使用 CGAffineTransform 进行 90 度旋转。

为了再次缩小视频,我基本上将设置设置为之前的样子。 (做事的顺序很重要)

另一件同样非常重要的事情是重写 videoPlayerView 中的 layoutSubviews 方法,如下所示:

override func layoutSubviews() {
super.layoutSubviews()
self.playerLayer?.frame = self.bounds
}

这将使您的 playerLayer 在 View 变大时调整其框架。

关于swift - 动画视频 UIView 像 YouTube 应用程序一样全屏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com