Skip to content
This repository was archived by the owner on Nov 24, 2021. It is now read-only.

Commit 436efdd

Browse files
authored
Feature: flag to autoplay videos (#70)
* Include flag to autoplay videos * Improve autoplay behaviour
1 parent 034a844 commit 436efdd

3 files changed

Lines changed: 35 additions & 11 deletions

File tree

Source/VideoView.swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class VideoView: UIView {
2323

2424
var image: UIImage?
2525

26+
var autoplay = false
27+
2628
private lazy var loadingIndicator: UIActivityIndicatorView = {
2729
let view = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
2830
view.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin]
@@ -78,8 +80,11 @@ class VideoView: UIView {
7880

7981
if player.status == .readyToPlay {
8082
self.stopPlayerAndRemoveObserverIfNecessary()
81-
player.play()
82-
self.viewDelegate?.videoViewDidStartPlaying(self)
83+
84+
if self.autoplay {
85+
player.play()
86+
self.viewDelegate?.videoViewDidStartPlaying(self)
87+
}
8388
}
8489
}
8590

@@ -96,7 +101,9 @@ class VideoView: UIView {
96101

97102
var timeObserver: Any?
98103

99-
func start(_ viewerItem: ViewerItem) {
104+
func start(_ viewerItem: ViewerItem, autoplay: Bool) {
105+
self.autoplay = autoplay
106+
100107
if let assetID = viewerItem.assetID {
101108
#if os(iOS)
102109
let result = PHAsset.fetchAssets(withLocalIdentifiers: [assetID], options: nil)
@@ -152,12 +159,14 @@ class VideoView: UIView {
152159
self.updateProgressBar(forDuration: duration, currentTime: currentTime)
153160
}
154161

155-
self.playerLayer.isHidden = false
162+
if self.autoplay {
163+
self.playerLayer.isHidden = false
164+
}
156165

157166
if self.shouldRegisterForNotifications {
158167
guard let player = self.playerLayer.player else { fatalError("No player item was found") }
159168

160-
if player.status == .unknown {
169+
if self.autoplay && player.status == .unknown {
161170
self.loadingIndicator.startAnimating()
162171
self.loadingIndicatorBackground.alpha = 1
163172
}

Source/ViewerController.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ public class ViewerController: UIViewController {
5151
public weak var controllerDelegate: ViewerControllerDelegate?
5252
public weak var controllerDataSource: ViewerControllerDataSource?
5353

54+
/**
55+
Flag that tells the viewer controller to autoplay videos on focus
56+
*/
57+
public var autoplayVideos: Bool = false
58+
5459
/**
5560
Cache for the reused ViewerItemControllers
5661
*/
@@ -439,6 +444,10 @@ extension ViewerController: ViewerItemControllerDataSource {
439444

440445
return viewerItemController == focusedViewerItemController
441446
}
447+
448+
func viewerItemControllerShouldAutoplayVideo(_ viewerItemController: ViewerItemController) -> Bool {
449+
return self.autoplayVideos
450+
}
442451
}
443452

444453
extension ViewerController: UIGestureRecognizerDelegate {

Source/ViewerItemController.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ protocol ViewerItemControllerDelegate: class {
1313
protocol ViewerItemControllerDataSource: class {
1414
func isViewerItemControllerOverlayHidden(_ viewerItemController: ViewerItemController) -> Bool
1515
func viewerItemControllerIsFocused(_ viewerItemController: ViewerItemController) -> Bool
16+
func viewerItemControllerShouldAutoplayVideo(_ viewerItemController: ViewerItemController) -> Bool
1617
}
1718

1819
class ViewerItemController: UIViewController {
@@ -209,16 +210,21 @@ class ViewerItemController: UIViewController {
209210
func didFocus() {
210211
guard let viewerItem = self.viewerItem else { return }
211212

212-
if viewerItem.type == .Video {
213-
self.videoView.start(viewerItem)
214-
NotificationCenter.default.addObserver(self, selector: #selector(ViewerItemController.videoFinishedPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
215-
} else {
216-
viewerItem.media({ image, error in
213+
switch viewerItem.type {
214+
case .image:
215+
viewerItem.media { image, error in
217216
if let image = image {
218217
self.imageView.image = image
219218
self.zoomingScrollView.maximumZoomScale = self.maxZoomScale()
220219
}
221-
})
220+
}
221+
case .video:
222+
let autoplayVideo = self.controllerDataSource?.viewerItemControllerShouldAutoplayVideo(self) ?? false
223+
self.videoView.start(viewerItem, autoplay: autoplayVideo)
224+
NotificationCenter.default.addObserver(self, selector: #selector(ViewerItemController.videoFinishedPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
225+
if autoplayVideo == false {
226+
self.playButton.alpha = 1
227+
}
222228
}
223229
}
224230

0 commit comments

Comments
 (0)