mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-10 16:29:55 +00:00
added ASDefaultPlayButton, but need to make drawing dynamic so its always a centered circle, also fixed video player preview layer stuff
This commit is contained in:
parent
f696eb7476
commit
3b38559c4d
@ -360,6 +360,8 @@
|
|||||||
ACF6ED611B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED591B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm */; };
|
ACF6ED611B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED591B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm */; };
|
||||||
ACF6ED621B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED5A1B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm */; };
|
ACF6ED621B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED5A1B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm */; };
|
||||||
ACF6ED631B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED5B1B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm */; };
|
ACF6ED631B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = ACF6ED5B1B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm */; };
|
||||||
|
AEB7B01A1C5962EA00662EF4 /* ASDefaultPlayButton.h in Headers */ = {isa = PBXBuildFile; fileRef = AEB7B0181C5962EA00662EF4 /* ASDefaultPlayButton.h */; };
|
||||||
|
AEB7B01B1C5962EA00662EF4 /* ASDefaultPlayButton.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB7B0191C5962EA00662EF4 /* ASDefaultPlayButton.m */; };
|
||||||
AEEC47E11C20C2DD00EC1693 /* ASVideoNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AEEC47DF1C20C2DD00EC1693 /* ASVideoNode.h */; };
|
AEEC47E11C20C2DD00EC1693 /* ASVideoNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AEEC47DF1C20C2DD00EC1693 /* ASVideoNode.h */; };
|
||||||
AEEC47E21C20C2DD00EC1693 /* ASVideoNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = AEEC47E01C20C2DD00EC1693 /* ASVideoNode.mm */; };
|
AEEC47E21C20C2DD00EC1693 /* ASVideoNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = AEEC47E01C20C2DD00EC1693 /* ASVideoNode.mm */; };
|
||||||
AEEC47E41C21D3D200EC1693 /* ASVideoNodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AEEC47E31C21D3D200EC1693 /* ASVideoNodeTests.m */; };
|
AEEC47E41C21D3D200EC1693 /* ASVideoNodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AEEC47E31C21D3D200EC1693 /* ASVideoNodeTests.m */; };
|
||||||
@ -778,6 +780,8 @@
|
|||||||
ACF6ED591B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASOverlayLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
ACF6ED591B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASOverlayLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
||||||
ACF6ED5A1B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASRatioLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
ACF6ED5A1B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASRatioLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
||||||
ACF6ED5B1B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
ACF6ED5B1B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackLayoutSpecSnapshotTests.mm; sourceTree = "<group>"; };
|
||||||
|
AEB7B0181C5962EA00662EF4 /* ASDefaultPlayButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDefaultPlayButton.h; sourceTree = "<group>"; };
|
||||||
|
AEB7B0191C5962EA00662EF4 /* ASDefaultPlayButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASDefaultPlayButton.m; sourceTree = "<group>"; };
|
||||||
AEEC47DF1C20C2DD00EC1693 /* ASVideoNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASVideoNode.h; sourceTree = "<group>"; };
|
AEEC47DF1C20C2DD00EC1693 /* ASVideoNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASVideoNode.h; sourceTree = "<group>"; };
|
||||||
AEEC47E01C20C2DD00EC1693 /* ASVideoNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASVideoNode.mm; sourceTree = "<group>"; };
|
AEEC47E01C20C2DD00EC1693 /* ASVideoNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASVideoNode.mm; sourceTree = "<group>"; };
|
||||||
AEEC47E31C21D3D200EC1693 /* ASVideoNodeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASVideoNodeTests.m; sourceTree = "<group>"; };
|
AEEC47E31C21D3D200EC1693 /* ASVideoNodeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASVideoNodeTests.m; sourceTree = "<group>"; };
|
||||||
@ -1153,6 +1157,8 @@
|
|||||||
ACF6ED4A1B17847A00DA7C62 /* ASStackUnpositionedLayout.mm */,
|
ACF6ED4A1B17847A00DA7C62 /* ASStackUnpositionedLayout.mm */,
|
||||||
0442850B1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.h */,
|
0442850B1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.h */,
|
||||||
0442850C1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.mm */,
|
0442850C1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.mm */,
|
||||||
|
AEB7B0181C5962EA00662EF4 /* ASDefaultPlayButton.h */,
|
||||||
|
AEB7B0191C5962EA00662EF4 /* ASDefaultPlayButton.m */,
|
||||||
);
|
);
|
||||||
path = Private;
|
path = Private;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1315,6 +1321,7 @@
|
|||||||
205F0E191B37339C007741D0 /* ASAbstractLayoutController.h in Headers */,
|
205F0E191B37339C007741D0 /* ASAbstractLayoutController.h in Headers */,
|
||||||
058D0A82195D060300B7D73C /* ASAssert.h in Headers */,
|
058D0A82195D060300B7D73C /* ASAssert.h in Headers */,
|
||||||
0516FA3C1A15563400B4EBED /* ASAvailability.h in Headers */,
|
0516FA3C1A15563400B4EBED /* ASAvailability.h in Headers */,
|
||||||
|
AEB7B01A1C5962EA00662EF4 /* ASDefaultPlayButton.h in Headers */,
|
||||||
ACF6ED1A1B17843500DA7C62 /* ASBackgroundLayoutSpec.h in Headers */,
|
ACF6ED1A1B17843500DA7C62 /* ASBackgroundLayoutSpec.h in Headers */,
|
||||||
058D0A83195D060300B7D73C /* ASBaseDefines.h in Headers */,
|
058D0A83195D060300B7D73C /* ASBaseDefines.h in Headers */,
|
||||||
054963491A1EA066000F8E56 /* ASBasicImageDownloader.h in Headers */,
|
054963491A1EA066000F8E56 /* ASBasicImageDownloader.h in Headers */,
|
||||||
@ -1801,6 +1808,7 @@
|
|||||||
A32FEDD61C501B6A004F642A /* ASTextKitFontSizeAdjuster.m in Sources */,
|
A32FEDD61C501B6A004F642A /* ASTextKitFontSizeAdjuster.m in Sources */,
|
||||||
058D0A1B195D050800B7D73C /* ASMutableAttributedStringBuilder.m in Sources */,
|
058D0A1B195D050800B7D73C /* ASMutableAttributedStringBuilder.m in Sources */,
|
||||||
055B9FA91A1C154B00035D6D /* ASNetworkImageNode.mm in Sources */,
|
055B9FA91A1C154B00035D6D /* ASNetworkImageNode.mm in Sources */,
|
||||||
|
AEB7B01B1C5962EA00662EF4 /* ASDefaultPlayButton.m in Sources */,
|
||||||
ACF6ED2C1B17843500DA7C62 /* ASOverlayLayoutSpec.mm in Sources */,
|
ACF6ED2C1B17843500DA7C62 /* ASOverlayLayoutSpec.mm in Sources */,
|
||||||
0442850F1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.mm in Sources */,
|
0442850F1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.mm in Sources */,
|
||||||
257754921BED28F300737CA5 /* ASEqualityHashHelpers.mm in Sources */,
|
257754921BED28F300737CA5 /* ASEqualityHashHelpers.mm in Sources */,
|
||||||
|
|||||||
@ -8,12 +8,6 @@
|
|||||||
|
|
||||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, ASVideoGravity) {
|
|
||||||
ASVideoGravityResizeAspect,
|
|
||||||
ASVideoGravityResizeAspectFill,
|
|
||||||
ASVideoGravityResize
|
|
||||||
};
|
|
||||||
|
|
||||||
@protocol ASVideoNodeDelegate;
|
@protocol ASVideoNodeDelegate;
|
||||||
|
|
||||||
// If you need ASVideoNode, please use AsyncDisplayKit master until this comment is removed.
|
// If you need ASVideoNode, please use AsyncDisplayKit master until this comment is removed.
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "ASVideoNode.h"
|
#import "ASVideoNode.h"
|
||||||
|
#import "ASDefaultPlayButton.h"
|
||||||
|
|
||||||
@interface ASVideoNode ()
|
@interface ASVideoNode ()
|
||||||
{
|
{
|
||||||
@ -43,12 +44,14 @@
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
_previewQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
NSLog(@"*** Warning: ASVideoNode is a new component - the 1.9.6 version may cause performance hiccups.");
|
NSLog(@"*** Warning: ASVideoNode is a new component - the 1.9.6 version may cause performance hiccups.");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_previewQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
|
||||||
|
|
||||||
|
self.playButton = [[ASDefaultPlayButton alloc] init];
|
||||||
|
|
||||||
self.gravity = AVLayerVideoGravityResizeAspect;
|
self.gravity = AVLayerVideoGravityResizeAspect;
|
||||||
|
|
||||||
[self addTarget:self action:@selector(tapped) forControlEvents:ASControlNodeEventTouchUpInside];
|
[self addTarget:self action:@selector(tapped) forControlEvents:ASControlNodeEventTouchUpInside];
|
||||||
@ -114,6 +117,8 @@
|
|||||||
_playerNode.frame = bounds;
|
_playerNode.frame = bounds;
|
||||||
_playerNode.layer.frame = bounds;
|
_playerNode.layer.frame = bounds;
|
||||||
|
|
||||||
|
_playButton.frame = bounds;
|
||||||
|
|
||||||
CGFloat horizontalDiff = (bounds.size.width - _playButton.bounds.size.width)/2;
|
CGFloat horizontalDiff = (bounds.size.width - _playButton.bounds.size.width)/2;
|
||||||
CGFloat verticalDiff = (bounds.size.height - _playButton.bounds.size.height)/2;
|
CGFloat verticalDiff = (bounds.size.height - _playButton.bounds.size.height)/2;
|
||||||
_playButton.hitTestSlop = UIEdgeInsetsMake(-verticalDiff, -horizontalDiff, -verticalDiff, -horizontalDiff);
|
_playButton.hitTestSlop = UIEdgeInsetsMake(-verticalDiff, -horizontalDiff, -verticalDiff, -horizontalDiff);
|
||||||
@ -142,13 +147,23 @@
|
|||||||
} else {
|
} else {
|
||||||
dispatch_async(_previewQueue, ^{
|
dispatch_async(_previewQueue, ^{
|
||||||
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:_asset];
|
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:_asset];
|
||||||
|
imageGenerator.appliesPreferredTrackTransform = YES;
|
||||||
[imageGenerator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:CMTimeMake(0, 1)]] completionHandler:^(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
|
[imageGenerator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:CMTimeMake(0, 1)]] completionHandler:^(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
|
||||||
UIImage *theImage = [UIImage imageWithCGImage:image];
|
UIImage *theImage = [UIImage imageWithCGImage:image];
|
||||||
|
|
||||||
_placeholderImageNode = [[ASImageNode alloc] init];
|
_placeholderImageNode = [[ASImageNode alloc] init];
|
||||||
_placeholderImageNode.layerBacked = YES;
|
_placeholderImageNode.layerBacked = YES;
|
||||||
_placeholderImageNode.image = theImage;
|
_placeholderImageNode.image = theImage;
|
||||||
_placeholderImageNode.contentMode = UIViewContentModeScaleAspectFit;
|
|
||||||
|
if ([_gravity isEqualToString:AVLayerVideoGravityResize]) {
|
||||||
|
_placeholderImageNode.contentMode = UIViewContentModeRedraw;
|
||||||
|
}
|
||||||
|
if ([_gravity isEqualToString:AVLayerVideoGravityResizeAspect]) {
|
||||||
|
_placeholderImageNode.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
|
}
|
||||||
|
if ([_gravity isEqual:AVLayerVideoGravityResizeAspectFill]) {
|
||||||
|
_placeholderImageNode.contentMode = UIViewContentModeScaleAspectFill;
|
||||||
|
}
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
_placeholderImageNode.frame = self.bounds;
|
_placeholderImageNode.frame = self.bounds;
|
||||||
@ -321,12 +336,19 @@
|
|||||||
return playerLayer;
|
return playerLayer;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self addSubnode:_playerNode];
|
if ([self.subnodes containsObject:_playButton]) {
|
||||||
|
[self insertSubnode:_playerNode belowSubnode:_playButton];
|
||||||
|
} else {
|
||||||
|
[self addSubnode:_playerNode];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[_player play];
|
[_player play];
|
||||||
_shouldBePlaying = YES;
|
_shouldBePlaying = YES;
|
||||||
_playButton.alpha = 0.0;
|
|
||||||
|
[UIView animateWithDuration:0.15 animations:^{
|
||||||
|
_playButton.alpha = 0.0;
|
||||||
|
}];
|
||||||
|
|
||||||
if (![self ready] && _shouldBePlaying && (self.interfaceState & ASInterfaceStateVisible)) {
|
if (![self ready] && _shouldBePlaying && (self.interfaceState & ASInterfaceStateVisible)) {
|
||||||
[self addSubnode:_spinner];
|
[self addSubnode:_spinner];
|
||||||
@ -346,7 +368,9 @@
|
|||||||
[_player pause];
|
[_player pause];
|
||||||
[((UIActivityIndicatorView *)_spinner.view) stopAnimating];
|
[((UIActivityIndicatorView *)_spinner.view) stopAnimating];
|
||||||
_shouldBePlaying = NO;
|
_shouldBePlaying = NO;
|
||||||
_playButton.alpha = 1.0;
|
[UIView animateWithDuration:0.15 animations:^{
|
||||||
|
_playButton.alpha = 1.0;
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)isPlaying
|
- (BOOL)isPlaying
|
||||||
|
|||||||
13
AsyncDisplayKit/Private/ASDefaultPlayButton.h
Normal file
13
AsyncDisplayKit/Private/ASDefaultPlayButton.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//
|
||||||
|
// ASDefaultPlayButton.h
|
||||||
|
// AsyncDisplayKit
|
||||||
|
//
|
||||||
|
// Created by Luke Parham on 1/27/16.
|
||||||
|
// Copyright © 2016 Facebook. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||||
|
|
||||||
|
@interface ASDefaultPlayButton : ASButtonNode
|
||||||
|
|
||||||
|
@end
|
||||||
72
AsyncDisplayKit/Private/ASDefaultPlayButton.m
Normal file
72
AsyncDisplayKit/Private/ASDefaultPlayButton.m
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// ASDefaultPlayButton.m
|
||||||
|
// AsyncDisplayKit
|
||||||
|
//
|
||||||
|
// Created by Luke Parham on 1/27/16.
|
||||||
|
// Copyright © 2016 Facebook. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "ASDefaultPlayButton.h"
|
||||||
|
|
||||||
|
@implementation ASDefaultPlayButton
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
if (!(self = [super init])) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.opaque = NO;
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)drawRect:(CGRect)bounds withParameters:(id<NSObject>)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing
|
||||||
|
{
|
||||||
|
CGRect buttonBounds;
|
||||||
|
buttonBounds = CGRectMake(bounds.size.width/4, bounds.size.height/4, bounds.size.width/2, bounds.size.height/2);
|
||||||
|
|
||||||
|
if (bounds.size.width < bounds.size.height) {
|
||||||
|
//then use the width to determine the rect size then calculate the origin x y
|
||||||
|
buttonBounds = CGRectMake(bounds.size.width/4, bounds.size.width/4, bounds.size.width/2, bounds.size.width/2);
|
||||||
|
}
|
||||||
|
if (bounds.size.width > bounds.size.height) {
|
||||||
|
//use the height
|
||||||
|
buttonBounds = CGRectMake(bounds.size.height/4, bounds.size.height/4, bounds.size.height/2, bounds.size.height/2);
|
||||||
|
}
|
||||||
|
if (bounds.size.width == bounds.size.height) {
|
||||||
|
//square so easy
|
||||||
|
buttonBounds = CGRectMake(bounds.size.width/4, bounds.size.height/4, bounds.size.width/2, bounds.size.height/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
CGContextSaveGState(context);
|
||||||
|
|
||||||
|
CGFloat buttonWidth = buttonBounds.size.width;
|
||||||
|
|
||||||
|
UIBezierPath *trianglePath = [UIBezierPath bezierPath];
|
||||||
|
[trianglePath moveToPoint:CGPointMake(bounds.size.width/4 + buttonWidth/3, bounds.size.height/4 + (bounds.size.height/2)/4)];
|
||||||
|
[trianglePath addLineToPoint:CGPointMake(bounds.size.width/4 + buttonWidth/3, bounds.size.height - bounds.size.height/4 - (bounds.size.height/2)/4)];
|
||||||
|
[trianglePath addLineToPoint:CGPointMake(bounds.size.width - bounds.size.width/4 - buttonWidth/4, bounds.size.height/2)];
|
||||||
|
|
||||||
|
[trianglePath closePath];
|
||||||
|
[[UIColor colorWithWhite:0.9 alpha:0.9] setFill];
|
||||||
|
[trianglePath fill];
|
||||||
|
|
||||||
|
CGContextRestoreGState(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@ -128,6 +128,7 @@
|
|||||||
05E2127E19D4DB510098F589 /* Frameworks */,
|
05E2127E19D4DB510098F589 /* Frameworks */,
|
||||||
05E2127F19D4DB510098F589 /* Resources */,
|
05E2127F19D4DB510098F589 /* Resources */,
|
||||||
F012A6F39E0149F18F564F50 /* Copy Pods Resources */,
|
F012A6F39E0149F18F564F50 /* Copy Pods Resources */,
|
||||||
|
EBE12F047824F0A2C6353B54 /* Embed Pods Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -199,6 +200,21 @@
|
|||||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
|
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
|
EBE12F047824F0A2C6353B54 /* 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/Pods-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
F012A6F39E0149F18F564F50 /* Copy Pods Resources */ = {
|
F012A6F39E0149F18F564F50 /* Copy Pods Resources */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
videoNode.backgroundColor = [UIColor lightGrayColor];
|
videoNode.backgroundColor = [UIColor lightGrayColor];
|
||||||
|
|
||||||
videoNode.playButton = [self playButton];
|
// videoNode.playButton = [self playButton];
|
||||||
return videoNode;
|
return videoNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@
|
|||||||
|
|
||||||
nicCageVideo.backgroundColor = [UIColor lightGrayColor];
|
nicCageVideo.backgroundColor = [UIColor lightGrayColor];
|
||||||
nicCageVideo.shouldAutorepeat = YES;
|
nicCageVideo.shouldAutorepeat = YES;
|
||||||
nicCageVideo.playButton = [self playButton];
|
// nicCageVideo.playButton = [self playButton];
|
||||||
|
|
||||||
return nicCageVideo;
|
return nicCageVideo;
|
||||||
}
|
}
|
||||||
@ -75,11 +75,11 @@
|
|||||||
|
|
||||||
simonVideo.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height - ([UIScreen mainScreen].bounds.size.height/3), [UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/3);
|
simonVideo.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height - ([UIScreen mainScreen].bounds.size.height/3), [UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/3);
|
||||||
|
|
||||||
simonVideo.gravity = ASVideoGravityResizeAspect;
|
simonVideo.gravity = AVLayerVideoGravityResizeAspect;
|
||||||
|
|
||||||
simonVideo.backgroundColor = [UIColor lightGrayColor];
|
simonVideo.backgroundColor = [UIColor lightGrayColor];
|
||||||
simonVideo.shouldAutorepeat = YES;
|
simonVideo.shouldAutorepeat = YES;
|
||||||
simonVideo.playButton = [self playButton];
|
// simonVideo.playButton = [self playButton];
|
||||||
simonVideo.shouldAutoplay = YES;
|
simonVideo.shouldAutoplay = YES;
|
||||||
|
|
||||||
return simonVideo;
|
return simonVideo;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user