SVGAContentLayer.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 (frame < self.frames.count) {
  28. SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
  29. if (frameItem.alpha > 0.0) {
  30. self.hidden = NO;
  31. self.opacity = frameItem.alpha;
  32. CGFloat nx = frameItem.nx;
  33. CGFloat ny = frameItem.ny;
  34. self.position = CGPointMake(0, 0);
  35. self.transform = CATransform3DIdentity;
  36. self.frame = frameItem.layout;
  37. self.transform = CATransform3DMakeAffineTransform(frameItem.transform);
  38. CGFloat offsetX = self.frame.origin.x - nx;
  39. CGFloat offsetY = self.frame.origin.y - ny;
  40. self.position = CGPointMake(self.position.x - offsetX, self.position.y - offsetY);
  41. self.mask = frameItem.maskLayer;
  42. [self.bitmapLayer stepToFrame:frame];
  43. [self.vectorLayer stepToFrame:frame];
  44. }
  45. else {
  46. self.hidden = YES;
  47. }
  48. }
  49. }
  50. - (void)setFrame:(CGRect)frame {
  51. [super setFrame:frame];
  52. self.bitmapLayer.frame = self.bounds;
  53. self.vectorLayer.frame = self.bounds;
  54. for (CALayer *sublayer in self.sublayers) {
  55. if ([sublayer isKindOfClass:[CATextLayer class]]) {
  56. CGRect frame = sublayer.frame;
  57. frame.origin.x = (self.frame.size.width - sublayer.frame.size.width) / 2.0;
  58. frame.origin.y = (self.frame.size.height - sublayer.frame.size.height) / 2.0;
  59. sublayer.frame = frame;
  60. }
  61. }
  62. }
  63. - (void)setBitmapLayer:(SVGABitmapLayer *)bitmapLayer {
  64. [_bitmapLayer removeFromSuperlayer];
  65. _bitmapLayer = bitmapLayer;
  66. [self addSublayer:bitmapLayer];
  67. }
  68. - (void)setVectorLayer:(SVGAVectorLayer *)vectorLayer {
  69. [_vectorLayer removeFromSuperlayer];
  70. _vectorLayer = vectorLayer;
  71. [self addSublayer:vectorLayer];
  72. }
  73. @end