| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // SVGAContentLayer.m
- // SVGAPlayer
- //
- // Created by 崔明辉 on 2017/2/22.
- // Copyright © 2017年 UED Center. All rights reserved.
- //
- #import "SVGAContentLayer.h"
- #import "SVGABitmapLayer.h"
- #import "SVGAVectorLayer.h"
- #import "SVGAVideoSpriteFrameEntity.h"
- @interface SVGAContentLayer ()
- @property (nonatomic, strong) NSArray<SVGAVideoSpriteFrameEntity *> *frames;
- @end
- @implementation SVGAContentLayer
- - (instancetype)initWithFrames:(NSArray *)frames {
- self = [super init];
- if (self) {
- self.backgroundColor = [UIColor clearColor].CGColor;
- self.masksToBounds = NO;
- _frames = frames;
- [self stepToFrame:0];
- }
- return self;
- }
- - (void)stepToFrame:(NSInteger)frame {
- if (self.dynamicHidden) {
- return;
- }
- if (frame < self.frames.count) {
- SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
- if (frameItem.alpha > 0.0) {
- self.hidden = NO;
- self.opacity = frameItem.alpha;
- CGFloat nx = frameItem.nx;
- CGFloat ny = frameItem.ny;
- self.position = CGPointMake(0, 0);
- self.transform = CATransform3DIdentity;
- self.frame = frameItem.layout;
- self.transform = CATransform3DMakeAffineTransform(frameItem.transform);
- CGFloat offsetX = self.frame.origin.x - nx;
- CGFloat offsetY = self.frame.origin.y - ny;
- self.position = CGPointMake(self.position.x - offsetX, self.position.y - offsetY);
- self.mask = frameItem.maskLayer;
- [self.bitmapLayer stepToFrame:frame];
- [self.vectorLayer stepToFrame:frame];
- }
- else {
- self.hidden = YES;
- }
- if (self.dynamicDrawingBlock) {
- self.dynamicDrawingBlock(self, frame);
- }
- }
- }
- - (void)setFrame:(CGRect)frame {
- [super setFrame:frame];
- self.bitmapLayer.frame = self.bounds;
- self.vectorLayer.frame = self.bounds;
- for (CALayer *sublayer in self.sublayers) {
- if ([sublayer isKindOfClass:[CATextLayer class]]) {
- CGRect frame = sublayer.frame;
- frame.origin.x = (self.frame.size.width - sublayer.frame.size.width) / 2.0;
- frame.origin.y = (self.frame.size.height - sublayer.frame.size.height) / 2.0;
- sublayer.frame = frame;
- }
- }
- }
- - (void)setBitmapLayer:(SVGABitmapLayer *)bitmapLayer {
- [_bitmapLayer removeFromSuperlayer];
- _bitmapLayer = bitmapLayer;
- [self addSublayer:bitmapLayer];
- }
- - (void)setVectorLayer:(SVGAVectorLayer *)vectorLayer {
- [_vectorLayer removeFromSuperlayer];
- _vectorLayer = vectorLayer;
- [self addSublayer:vectorLayer];
- }
- - (void)setDynamicHidden:(BOOL)dynamicHidden {
- _dynamicHidden = dynamicHidden;
- self.hidden = dynamicHidden;
- }
- @end
|