Reputation: 603
I'd like to be able to start the video on my app in cardboard mode enabled.
I have install successfully the Gooogle VR player SDK, I created a button to start the video in full screen mode enabled, with success as well !!
I'd like another button, starting this time the video in Cardboard mode, but I can't make it work !!
Below is the code of my controller having the button:
//
// FeedDetails.swift
// MobileAppDemo
//
// Created by Mikko Hilpinen on 31.10.2016.
// Copyright © 2016 Mikkomario. All rights reserved.
//
import UIKit
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
import SwiftKeychainWrapper
import SwiftyJSON
class FeedDetailsController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var titleLabel: UITextView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet var videoVRView: GVRVideoView!
@IBOutlet var imageVRView: GVRPanoramaView!
@IBOutlet var cardboardVRview: GVRCardboardView!
@IBOutlet var imageLabel: UILabel!
@IBOutlet var videoLabel: UILabel!
enum Media {
static var photoArray = ["test.jpg"]
static let videoURL = "https:/myserver.com/videolight.mp4"
}
var currentView: UIView?
var currentDisplayMode = GVRWidgetDisplayMode.embedded
var isPaused = true
override func viewDidLoad() {
super.viewDidLoad()
imageLabel.isHidden = true
imageVRView.isHidden = true
videoLabel.isHidden = true
videoVRView.isHidden = true
cardboardVRview.isHidden = true
imageVRView.load(UIImage(named: Media.photoArray.first!),
of: GVRPanoramaImageType.mono)
imageVRView.enableCardboardButton = true
imageVRView.enableFullscreenButton = true
// imageVRView.delegate = self
videoVRView.load(from: URL(string: Media.videoURL))
videoVRView.enableCardboardButton = true
videoVRView.enableFullscreenButton = true
// videoVRView.delegate = self
cardboardVRview.load(from: URL(string: Media.videoURL))
cardboardVRview.enableCardboardButton = true
cardboardVRview.enableFullscreenButton = true
// change to your specification
textView.isEditable = false
textView.isSelectable = false
titleLabel.isEditable = false
titleLabel.isSelectable = false
textView.text = posts[selectedIndexPath].caption
titleLabel.text = posts[selectedIndexPath].title
Storage.getImage(with: posts[selectedIndexPath].imageUrl){
postPic in
self.imageView.image = postPic
}
}
// TRIGER VIDEO 360 //
@IBAction func videoButton(_ sender: UIButton) {
if let button = self.videoVRView.subviews[1] as? UIButton {
button.sendActions(for: .touchUpInside)
}
}
func widgetView(widgetView: GVRWidgetView!, didLoadContent content: AnyObject!) {
self.videoVRView.isHidden = false;
}
// END TRIGGER 360 //
// TRIGER CARDBOARD //
@IBAction func cardboardButton(_ sender: UIButton) {
if let button = self.cardboardVRview.subviews[1] as? UIButton {
button.sendActions(for: .touchUpInside)
}
}
func widgetViewcardboard(widgetView: GVRCardboardView!, didLoadContent content: AnyObject!) {
self.cardboardVRview.isHidden = false
}
// END CARDBOARD //
@IBAction func closeButton(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
func refreshVideoPlayStatus() {
if currentView == videoVRView && currentDisplayMode != GVRWidgetDisplayMode.embedded {
videoVRView?.resume()
isPaused = false
} else {
videoVRView?.pause()
isPaused = true
}
}
func setCurrentViewFromTouch(touchPoint point:CGPoint) {
if imageVRView!.frame.contains(point) {
currentView = imageVRView
}
if videoVRView!.frame.contains(point) {
currentView = videoVRView
}
}
}
extension FeedDetailsController: GVRWidgetViewDelegate {
func widgetView(_ widgetView: GVRWidgetView!, didLoadContent content: Any!) {
if content is UIImage {
imageVRView.isHidden = false
imageLabel.isHidden = false
} else if content is NSURL {
videoVRView.isHidden = false
videoLabel.isHidden = false
refreshVideoPlayStatus()
}
}
func widgetView(_ widgetView: GVRWidgetView!, didFailToLoadContent content: Any!, withErrorMessage errorMessage: String!) {
print(errorMessage)
}
func widgetView(_ widgetView: GVRWidgetView!, didChange displayMode: GVRWidgetDisplayMode) {
currentView = widgetView
currentDisplayMode = displayMode
refreshVideoPlayStatus()
if currentView == imageVRView && currentDisplayMode != GVRWidgetDisplayMode.embedded {
view.isHidden = true
} else {
view.isHidden = false
}
}
func widgetViewDidTap(_ widgetView: GVRWidgetView!) {
guard currentDisplayMode != GVRWidgetDisplayMode.embedded else {return}
if currentView == imageVRView {
Media.photoArray.append(Media.photoArray.removeFirst())
imageVRView?.load(UIImage(named: Media.photoArray.first!), of: GVRPanoramaImageType.mono)
} else {
if isPaused {
videoVRView?.resume()
} else {
videoVRView?.pause()
}
isPaused = !isPaused
}
}
}
extension FeedDetailsController: GVRVideoViewDelegate {
func videoView(_ videoView: GVRVideoView!, didUpdatePosition position: TimeInterval) {
OperationQueue.main.addOperation() {
if position >= videoView.duration() {
videoView.seek(to: 0)
videoView.resume()
}
}
}
}
class TouchView: UIView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
if let FeedDetailsController = viewController() as? FeedDetailsController , event?.type == UIEventType.touches {
FeedDetailsController.setCurrentViewFromTouch(touchPoint: point)
}
return true
}
func viewController() -> UIViewController? {
if self.next!.isKind(of: FeedDetailsController.self) {
return self.next as? UIViewController
} else {
return nil
}
}
}
I did the same process as to start to play a video in full screen mode, but by calling the GVRCardboardView instead of the GVRVideoView as you can see, but it doenst work ... I'm having error on those line:
cardboardVRview.load(from: URL(string: Media.videoURL))
cardboardVRview.enableCardboardButton = true
cardboardVRview.enableFullscreenButton = true
for the first line 'static member 'load' cannot be used in instance of type GVRCardboardView
and value of type 'GVRCardboardView' has no member 'enableFullscreenButton' and 'enableCardboardBUtton' for the two other lines . .
Does anybody know how I can make this work ??
It will fantastic ! Thank you guys !
Upvotes: 1
Views: 369
Reputation: 31
if you want to start in Cardboard mode by default. You should set the view as such. Meaning you would enter:
videoVRView.displayMode = GVRWidgetDisplayMode.fullscreenVR
Upvotes: 2