mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-11 15:10:37 +00:00
166 lines
6.4 KiB
Objective-C
166 lines
6.4 KiB
Objective-C
/* This file provided by Facebook is for non-commercial testing and evaluation
|
|
* purposes only. Facebook reserves all rights not expressly granted.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#import "ViewController.h"
|
|
|
|
@interface ViewController()<ASVideoPlayerNodeDelegate>
|
|
@property (nonatomic, strong) ASVideoPlayerNode *videoPlayerNode;
|
|
@end
|
|
|
|
@implementation ViewController
|
|
|
|
- (instancetype)init
|
|
{
|
|
if (!(self = [super initWithNode:self.videoPlayerNode])) {
|
|
return nil;
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
[super viewWillAppear:animated];
|
|
|
|
//[self.view addSubnode:self.videoPlayerNode];
|
|
|
|
//[self.videoPlayerNode setNeedsLayout];
|
|
}
|
|
|
|
- (ASVideoPlayerNode *)videoPlayerNode;
|
|
{
|
|
if (_videoPlayerNode) {
|
|
return _videoPlayerNode;
|
|
}
|
|
|
|
NSURL *fileUrl = [NSURL URLWithString:@"https://files.parsetfss.com/8a8a3b0c-619e-4e4d-b1d5-1b5ba9bf2b42/tfss-3045b261-7e93-4492-b7e5-5d6358376c9f-editedLiveAndDie.mov"];
|
|
|
|
_videoPlayerNode = [[ASVideoPlayerNode alloc] initWithUrl:fileUrl];
|
|
_videoPlayerNode.delegate = self;
|
|
|
|
_videoPlayerNode.backgroundColor = [UIColor blackColor];
|
|
|
|
return _videoPlayerNode;
|
|
}
|
|
|
|
#pragma mark - ASVideoPlayerNodeDelegate
|
|
- (NSArray *)videoPlayerNodeNeededControls:(ASVideoPlayerNode *)videoPlayer
|
|
{
|
|
return @[ @(ASVideoPlayerNodeControlTypePlaybackButton),
|
|
@(ASVideoPlayerNodeControlTypeElapsedText),
|
|
@(ASVideoPlayerNodeControlTypeScrubber),
|
|
@(ASVideoPlayerNodeControlTypeDurationText) ];
|
|
}
|
|
|
|
- (UIColor *)videoPlayerNodeScrubberMaximumTrackTint:(ASVideoPlayerNode *)videoPlayer
|
|
{
|
|
return [UIColor colorWithRed:1 green:1 blue:1 alpha:0.3];
|
|
}
|
|
|
|
- (UIColor *)videoPlayerNodeScrubberMinimumTrackTint:(ASVideoPlayerNode *)videoPlayer
|
|
{
|
|
return [UIColor whiteColor];
|
|
}
|
|
|
|
- (UIColor *)videoPlayerNodeScrubberThumbTint:(ASVideoPlayerNode *)videoPlayer
|
|
{
|
|
return [UIColor whiteColor];
|
|
}
|
|
|
|
- (NSDictionary *)videoPlayerNodeTimeLabelAttributes:(ASVideoPlayerNode *)videoPlayerNode timeLabelType:(ASVideoPlayerNodeControlType)timeLabelType
|
|
{
|
|
NSDictionary *options;
|
|
|
|
if (timeLabelType == ASVideoPlayerNodeControlTypeElapsedText) {
|
|
options = @{
|
|
NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0],
|
|
NSForegroundColorAttributeName: [UIColor orangeColor]
|
|
};
|
|
} else if (timeLabelType == ASVideoPlayerNodeControlTypeDurationText) {
|
|
options = @{
|
|
NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0],
|
|
NSForegroundColorAttributeName: [UIColor redColor]
|
|
};
|
|
}
|
|
|
|
return options;
|
|
}
|
|
|
|
- (ASLayoutSpec *)videoPlayerNodeLayoutSpec:(ASVideoPlayerNode *)videoPlayer
|
|
forControls:(NSDictionary *)controls
|
|
forConstrainedSize:(ASSizeRange)constrainedSize
|
|
{
|
|
|
|
NSMutableArray *bottomControls = [[NSMutableArray alloc] init];
|
|
NSMutableArray *topControls = [[NSMutableArray alloc] init];
|
|
|
|
ASDisplayNode *scrubberNode = controls[@(ASVideoPlayerNodeControlTypeScrubber)];
|
|
ASDisplayNode *playbackButtonNode = controls[@(ASVideoPlayerNodeControlTypePlaybackButton)];
|
|
ASTextNode *elapsedTexNode = controls[@(ASVideoPlayerNodeControlTypeElapsedText)];
|
|
ASTextNode *durationTexNode = controls[@(ASVideoPlayerNodeControlTypeDurationText)];
|
|
|
|
if (playbackButtonNode) {
|
|
[bottomControls addObject:playbackButtonNode];
|
|
}
|
|
|
|
if (scrubberNode) {
|
|
scrubberNode.preferredFrameSize = CGSizeMake(constrainedSize.max.width, 44.0);
|
|
[bottomControls addObject:scrubberNode];
|
|
}
|
|
|
|
if (elapsedTexNode) {
|
|
[topControls addObject:elapsedTexNode];
|
|
}
|
|
|
|
if (durationTexNode) {
|
|
[topControls addObject:durationTexNode];
|
|
}
|
|
|
|
ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
|
|
spacer.flexGrow = YES;
|
|
|
|
ASStackLayoutSpec *topBarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
|
spacing:10.0
|
|
justifyContent:ASStackLayoutJustifyContentCenter
|
|
alignItems:ASStackLayoutAlignItemsCenter
|
|
children:topControls];
|
|
|
|
|
|
|
|
UIEdgeInsets topBarSpecInsets = UIEdgeInsetsMake(20.0, 10.0, 0.0, 10.0);
|
|
|
|
ASInsetLayoutSpec *topBarSpecInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:topBarSpecInsets child:topBarSpec];
|
|
topBarSpecInsetSpec.alignSelf = ASStackLayoutAlignSelfStretch;
|
|
|
|
ASStackLayoutSpec *controlbarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
|
spacing:10.0
|
|
justifyContent:ASStackLayoutJustifyContentStart
|
|
alignItems:ASStackLayoutAlignItemsCenter
|
|
children:bottomControls];
|
|
controlbarSpec.alignSelf = ASStackLayoutAlignSelfStretch;
|
|
|
|
UIEdgeInsets insets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0);
|
|
|
|
ASInsetLayoutSpec *controlbarInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:controlbarSpec];
|
|
|
|
controlbarInsetSpec.alignSelf = ASStackLayoutAlignSelfStretch;
|
|
|
|
ASStackLayoutSpec *mainVerticalStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical
|
|
spacing:0.0
|
|
justifyContent:ASStackLayoutJustifyContentStart
|
|
alignItems:ASStackLayoutAlignItemsStart
|
|
children:@[ topBarSpecInsetSpec, spacer, controlbarInsetSpec ]];
|
|
|
|
|
|
return mainVerticalStack;
|
|
}
|
|
|
|
@end |