- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我搞了这两天多。我找不到任何解决方案。
我的要求是视频应该播放 Portrait inline、full screen、landscape。我这里的问题是如何识别视频是全屏横向播放还是纵向播放。我已经实现了 viewWillTransitionToSize
方法。但是 AVPlayer
有全屏箭头按钮。我如何识别用户点击了该选项。
第二个要求,一旦视频完成,在视频重播或下一个或上一个选项之上创建 View 。
这是我的代码;
if videoCellVal == nil {
videoCellVal = videoCell
comPlayerControl = AVPlayerViewController()
if let player = comPlayerControl {
let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/"+selectedSubmission.transcodeRefId+"/format/applehttp/protocol/http/a.m3u8"
let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)! )
commmentPlayer = AVPlayer(playerItem: playerItem)
player.player = commmentPlayer
player.view.frame = videoCell.frame
player.view.sizeToFit()
player.showsPlaybackControls = true
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:",
name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
videoCell.addSubview(player.view)
}
}
func playerDidFinishPlaying(note: NSNotification) {
print("Video Finished")
let DynamicView=UIView(frame: CGRectMake(100, 200, 100, 100))
DynamicView.backgroundColor=UIColor.greenColor()
DynamicView.layer.cornerRadius=25
DynamicView.layer.borderWidth=2
DynamicView.bringSubviewToFront(self.view)
self.view.addSubview(DynamicView)
}
最佳答案
为了检测全屏或视频大小的变化,你可以为 AVPlayerViewController 使用 KVO,代码可以是这样的:
[comPlayerControl .addObserver(self, forKeyPath:"videoBounds" , options: NSKeyValueObservingOptions.New, context: nil)]
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
print("KeyPath \(keyPath)")
if keyPath == "videoBounds" {
print("New Video Bounds \(change)")
}
}
在change
字典中可以查看视频帧/边界变化的变化
对于您提到的旋转,您可能必须使用 viewWillTransitionToSize
或 UIDeviceOrientationDidChangeNotification
通知,或者您可以使用 UIDevice.currentDevice().orientation 检查当前方向
因为我没有找到任何方法可以检查正在进行的视频中的变化
不过,如果您需要检测视频方向,您可以查看此链接:https://stackoverflow.com/a/25833399/4557505 ,以及该链接中的其他答案
对于视频的重复,您可以在代码中像这样将时间设置为零:
func playerDidFinishPlaying(notification: NSNotification) {
if let item = notification.object as? AVPlayerItem {
item.seekToTime(kCMTimeZero)
//you may directly play the video or can do further processing
}
}
要在项目末尾播放队列中的项目,您可以尝试使用 commmentQueuePlayer.advanceToNextItem()
您可以尝试在 contentOverlayView
中放置重播、下一个、上一个按钮
let topView = UIView(frame: CGRectMake(0,0, comPlayerControl.view.bounds.width,44))
topView.backgroundColor = UIColor ( red: 0.5, green: 0.5, blue: 0.5, alpha: 0.379 )
let btnNext = UIButton(frame:CGRectMake(0,0,80,44))
btnNext.setTitle("Next", forState:.Normal)
btnNext.addTarget(self, action:"playNext", forControlEvents:.TouchUpInside)
btnNext.userInteractionEnabled = true
btnNext.enabled = true
topView.addSubview(btnNext)
comPlayerControl.contentOverlayView?.addSubview(topView)
更新
对于observeValueForKeyPath
,您可以尝试这样的操作
var avWidth:CGFloat = 0
var avHeight:CGFloat = 0
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "videoBounds" {
let rect = change!["new"]! as! NSValue
if let newrect = rect.CGRectValue() as CGRect? {
if newrect.width > 0 || newrect.height > 0 {
if avWidth > 0 || avHeight > 0 {
if newrect.width > avWidth || newrect.height > avHeight {
print("Full Screen")
} else if newrect.width < avWidth || newrect.height < avHeight {
print("Normal screen")
} else {
}
}
avWidth = newrect.width
avHeight = newrect.height
}
}
}
}
关于ios - 检测以纵向或横向全屏播放的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323259/
即使我的设备旋转(纵向->横向->纵向),我也需要始终以横向模式录制视频。 取角度很简单,我用的是hyroscope。我的问题是总是横向录制视频。需要任何建议。 我正在使用 AVCaptureSess
我正在 iPad(1,2) 以及 Samsung Tab 2 上测试我的网络应用程序。我有不同的 CSS(外部)集可应用于 iPad 上的横向/纵向模式和选项卡 2 上的横向/纵向模式。 但我无法为
我正在将Snappy Bundle和Symfony 2.1一起使用。 我有一些问题未在此捆绑包的文档中找到: 如何设置方向? 有没有显示页码的方法? 这是我的捆绑包的config.yml: knp_s
我一直在寻找这个问题的答案,但找不到任何答案。显然,iPhone SDK 3.0 使得 UIImagePickerController 可以以横向模式显示成为可能 - 但我没有找到任何允许这样做的方法
我有 1 个 Storyboard,我在 Swift 3 中的 Xcode 8 上使用带有大小类的自动布局。 我有这个当前的肖像 View : 目前,这是 1 个带有标签的垂直堆栈 View 。 在横
我正为这个而焦头烂额。基本上,我需要我的菜单根据菜单的内容水平放置一个容器。所以,我知道 table 和 table-cell 属性可以做到这一点。但是,当我将其与 Superfish Menu 结合
我努力做到这一点: 但我无法正确获取第三列和翻转的标题。 我现在是这样的: 最佳答案 该解决方案适用于 IE9、Chrome、Firefox、Safari 和 Opera,不需要 JavaScrip
我想要一个水平方向的 WPF DataGrid,有人知道解决方案吗? 最佳答案 我之前已经这样做了,因为我们希望能够对 DataGrid 和 PropertyGrid 使用相同的控件。很多事情都必须改
我正在开发一个适用于智能手机的网站版本,在处理智能手机横向方向的媒体查询时遇到了一个小问题。对于纵向,我正在使用以下媒体查询并且它工作得很好: @media only screen and (max-
如何让“AVCaptureVideoPreviewLayer”在横向方向上正确显示?它在纵向模式下工作正常但不旋转,并且当父 View Controller 处于横向模式时显示旋转的相机捕获。 最佳答
这个问题在这里已经有了答案: Force "portrait" orientation mode (12 个回答) 关闭2年前。 我的第一款 Android 游戏即将完成,但我遇到了一个非常简单的问题
我的数据在其中一个字段中具有嵌套映射。例如,数据位于名为“customers”的表中,如下所示: 姓名:比尔·琼斯 地址:{"billing":{"street":"123 Main", "city"
我正在横向模式下运行应用程序。我需要注意什么才能使拍摄的屏幕截图也处于横向模式。 我在 iPhone 应用程序中使用以下代码,底部有标签栏并拍摄屏幕截图,但它始终仅处于纵向模式。为什么? UIWind
谁能举例说明如何将单点触控应用程序的 View 从纵向旋转为横向,反之亦然? 最佳答案 如果您在 Interface Builder 中设置 ui 元素的几何形状,请确保在 Size Inspecto
我正在使用简单的 MPMoviePlayerController。在纵向模式下,它嵌入到我的布局中。当我旋转我的设备时,我希望它全屏显示。在全屏模式下,有一个完成按钮,但它唯一的作用就是暂停视频。当点
我正在尝试读取 JSON 模式,但似乎无法弄清楚如何将所有先前对象等输出到层次结构中。 这是JSON响应方案 { "Shopping": { "Orders": { "OrderInfo": {
我想在我的布局中包含一个 SlidingDrawer,但我会将它放在布局的侧面。所以开口是从左到右,而不是从下往上。这怎么办? 最佳答案 this link可能会帮助您创建水平滑动抽屉。如果您正在使用
就在我以为我已经解决了所有问题时..我遇到了这个问题。 场景。 我有一个简单的 tableView。并在导航项的 titleView 中带有搜索栏。 SearchBar 通过 View Control
我有一个带有 MGSplitView 的应用程序,其中包含表格 View 和 UIWebView,该应用程序固定为横向。 Web View 有一个附加到 Web View 的 UITapGesture
我有一部 iPhone,我正在添加横向支持。之前只是肖像。 当键盘显示时,我无法将文本字段移开。 我使用的解决方案与记录在案的 Apple 解决方案非常相似 here . 该解决方案在纵向模式下工作正
我是一名优秀的程序员,十分优秀!