Merge pull request #1147 from lappp9/ASVideoNode

[ASVideoNode] Video muting, tap delegate override, general cleanup
This commit is contained in:
appleguy
2016-02-01 17:52:57 -08:00
6 changed files with 63 additions and 19 deletions

View File

@@ -1616,6 +1616,7 @@
058D09B9195D04C000B7D73C /* Frameworks */,
058D09BA195D04C000B7D73C /* Resources */,
3B9D88CDF51B429C8409E4B6 /* Copy Pods Resources */,
FB42E06CF915B60406431170 /* Embed Pods Frameworks */,
);
buildRules = (
);
@@ -1745,6 +1746,21 @@
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
FB42E06CF915B60406431170 /* Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -24,6 +24,8 @@
@property (nonatomic, assign, readwrite) BOOL shouldAutoplay;
@property (nonatomic, assign, readwrite) BOOL shouldAutorepeat;
@property (nonatomic, assign, readwrite) BOOL muted;
@property (atomic) NSString *gravity;
@property (atomic) ASButtonNode *playButton;
@@ -39,5 +41,6 @@
@protocol ASVideoNodeDelegate <NSObject>
@optional
- (void)videoPlaybackDidFinish:(ASVideoNode *)videoNode;
- (void)videoNodeWasTapped:(ASVideoNode *)videoNode;
@end

View File

@@ -19,6 +19,8 @@
BOOL _shouldAutorepeat;
BOOL _shouldAutoplay;
BOOL _muted;
AVAsset *_asset;
@@ -31,6 +33,7 @@
ASDisplayNode *_playerNode;
ASDisplayNode *_spinner;
NSString *_gravity;
dispatch_queue_t _previewQueue;
}
@@ -137,6 +140,7 @@
AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc] init];
if (!_player) {
_player = [AVPlayer playerWithPlayerItem:[[AVPlayerItem alloc] initWithAsset:_asset]];
_player.muted = _muted;
}
playerLayer.player = _player;
playerLayer.videoGravity = [self gravity];
@@ -176,10 +180,14 @@
- (void)tapped
{
if (_shouldBePlaying) {
[self pause];
if (self.delegate && [self.delegate respondsToSelector:@selector(videoNodeWasTapped:)]) {
[self.delegate videoNodeWasTapped:self];
} else {
[self play];
if (_shouldBePlaying) {
[self pause];
} else {
[self play];
}
}
}
@@ -209,11 +217,11 @@
[_player replaceCurrentItemWithPlayerItem:_currentItem];
} else {
_player = [[AVPlayer alloc] initWithPlayerItem:_currentItem];
_player.muted = _muted;
}
}
}
- (void)clearFetchedData
{
[super clearFetchedData];
@@ -231,11 +239,14 @@
if (_shouldAutoplay && _playerNode.isNodeLoaded) {
[self play];
} else if (_shouldAutoplay) {
_shouldBePlaying = YES;
}
if (isVisible) {
if (_playerNode.isNodeLoaded) {
if (!_player) {
_player = [AVPlayer playerWithPlayerItem:[[AVPlayerItem alloc] initWithAsset:_asset]];
_player.muted = _muted;
}
((AVPlayerLayer *)_playerNode.layer).player = _player;
}
@@ -256,7 +267,7 @@
[self addSubnode:playButton];
[_playButton addTarget:self action:@selector(play) forControlEvents:ASControlNodeEventTouchUpInside];
[_playButton addTarget:self action:@selector(tapped) forControlEvents:ASControlNodeEventTouchUpInside];
}
- (ASButtonNode *)playButton
@@ -310,6 +321,20 @@
return _gravity;
}
- (BOOL)muted
{
ASDN::MutexLocker l(_lock);
return _muted;
}
- (void)setMuted:(BOOL)muted
{
ASDN::MutexLocker l(_lock);
_muted = muted;
}
#pragma mark - Video Playback
- (void)play
@@ -330,6 +355,7 @@
AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc] init];
if (!_player) {
_player = [AVPlayer playerWithPlayerItem:[[AVPlayerItem alloc] initWithAsset:_asset]];
_player.muted = _muted;
}
playerLayer.player = _player;
playerLayer.videoGravity = [self gravity];

View File

@@ -27,30 +27,23 @@
CGRect buttonBounds = CGRectMake(originX, bounds.size.height/4, bounds.size.width/2, bounds.size.height/2);
CGFloat widthHeight = buttonBounds.size.width;
//When the video isn't a square, the lower bound should be used to figure out the circle size
if (bounds.size.width < bounds.size.height) {
//then use the width to determine the rect size then calculate the origin x y
widthHeight = bounds.size.width/2;
originX = (bounds.size.width - widthHeight)/2;
buttonBounds = CGRectMake(originX, (bounds.size.height - widthHeight)/2, widthHeight, widthHeight);
}
if (bounds.size.width > bounds.size.height) {
//use the height
widthHeight = bounds.size.height/2;
originX = (bounds.size.width - widthHeight)/2;
buttonBounds = CGRectMake(originX, (bounds.size.height - widthHeight)/2, widthHeight, widthHeight);
}
if (!isRasterizing) {
[[UIColor clearColor] set];
UIRectFill(bounds);
}
CGContextRef context = UIGraphicsGetCurrentContext();
// Circle Drawing
UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect: buttonBounds];
[[UIColor colorWithWhite:0.0 alpha:0.5] setFill];
[ovalPath stroke];
[ovalPath fill];
// Triangle Drawing

View File

@@ -73,8 +73,6 @@
XCTAssertEqualObjects(item, secondItem);
}
//Touch Handling
- (void)testSpinnerDefaultsToNil
{
XCTAssertNil(_videoNode.spinner);

View File

@@ -43,7 +43,6 @@
videoNode.backgroundColor = [UIColor lightGrayColor];
// videoNode.playButton = [self playButton];
return videoNode;
}
@@ -61,7 +60,8 @@
nicCageVideo.backgroundColor = [UIColor lightGrayColor];
nicCageVideo.shouldAutorepeat = YES;
// nicCageVideo.playButton = [self playButton];
nicCageVideo.shouldAutoplay = YES;
nicCageVideo.muted = YES;
return nicCageVideo;
}
@@ -79,7 +79,6 @@
simonVideo.backgroundColor = [UIColor lightGrayColor];
simonVideo.shouldAutorepeat = YES;
// simonVideo.playButton = [self playButton];
simonVideo.shouldAutoplay = YES;
return simonVideo;
@@ -99,6 +98,15 @@
return playButton;
}
- (void)videoNodeWasTapped:(ASVideoNode *)videoNode
{
if (videoNode.player.muted == YES) {
videoNode.player.muted = NO;
} else {
videoNode.player.muted = YES;
}
}
- (BOOL)prefersStatusBarHidden
{
return YES;