SVGAContentLayer.m 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // SVGAContentLayer.m
  3. // SVGAPlayer
  4. //
  5. // Created by 崔明辉 on 2017/2/22.
  6. // Copyright © 2017年 UED Center. All rights reserved.
  7. //
  8. #import "SVGAContentLayer.h"
  9. #import "SVGABitmapLayer.h"
  10. #import "SVGAVectorLayer.h"
  11. #import "SVGAVideoSpriteFrameEntity.h"
  12. @interface SVGAContentLayer ()
  13. @property (nonatomic, strong) NSArray<SVGAVideoSpriteFrameEntity *> *frames;
  14. @end
  15. @implementation SVGAContentLayer
  16. - (instancetype)initWithFrames:(NSArray *)frames {
  17. self = [super init];
  18. if (self) {
  19. self.backgroundColor = [UIColor clearColor].CGColor;
  20. self.masksToBounds = NO;
  21. _frames = frames;
  22. [self stepToFrame:0];
  23. }
  24. return self;
  25. }
  26. - (void)stepToFrame:(NSInteger)frame {
  27. if (self.dynamicHidden) {
  28. return;
  29. }
  30. if (frame < self.frames.count) {
  31. SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
  32. if (frameItem.alpha > 0.0) {
  33. self.hidden = NO;
  34. self.opacity = frameItem.alpha;
  35. CGFloat nx = frameItem.nx;
  36. CGFloat ny = frameItem.ny;
  37. self.position = CGPointMake(0, 0);
  38. self.transform = CATransform3DIdentity;
  39. self.frame = frameItem.layout;
  40. self.transform = CATransform3DMakeAffineTransform(frameItem.transform);
  41. CGFloat offsetX = self.frame.origin.x - nx;
  42. CGFloat offsetY = self.frame.origin.y - ny;
  43. self.position = CGPointMake(self.position.x - offsetX, self.position.y - offsetY);
  44. self.mask = frameItem.maskLayer;
  45. [self.bitmapLayer stepToFrame:frame];
  46. [self.vectorLayer stepToFrame:frame];
  47. }
  48. else {
  49. self.hidden = YES;
  50. }
  51. if (self.dynamicDrawingBlock) {
  52. self.dynamicDrawingBlock(self, frame);
  53. }
  54. }
  55. }
  56. - (void)setFrame:(CGRect)frame {
  57. [super setFrame:frame];
  58. self.bitmapLayer.frame = self.bounds;
  59. self.vectorLayer.frame = self.bounds;
  60. for (CALayer *sublayer in self.sublayers) {
  61. if ([sublayer isKindOfClass:[CATextLayer class]]) {
  62. CGRect frame = sublayer.frame;
  63. frame.origin.x = (self.frame.size.width - sublayer.frame.size.width) / 2.0;
  64. frame.origin.y = (self.frame.size.height - sublayer.frame.size.height) / 2.0;
  65. sublayer.frame = frame;
  66. }
  67. }
  68. }
  69. - (void)setBitmapLayer:(SVGABitmapLayer *)bitmapLayer {
  70. [_bitmapLayer removeFromSuperlayer];
  71. _bitmapLayer = bitmapLayer;
  72. [self addSublayer:bitmapLayer];
  73. }
  74. - (void)setVectorLayer:(SVGAVectorLayer *)vectorLayer {
  75. [_vectorLayer removeFromSuperlayer];
  76. _vectorLayer = vectorLayer;
  77. [self addSublayer:vectorLayer];
  78. }
  79. - (void)setDynamicHidden:(BOOL)dynamicHidden {
  80. _dynamicHidden = dynamicHidden;
  81. self.hidden = dynamicHidden;
  82. }
  83. @end