123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //
- // LOTFillRenderer.m
- // Lottie
- //
- // Created by brandon_withrow on 6/27/17.
- // Copyright © 2017 Airbnb. All rights reserved.
- //
- #import "LOTFillRenderer.h"
- #import "LOTColorInterpolator.h"
- #import "LOTNumberInterpolator.h"
- #import "LOTHelpers.h"
- @implementation LOTFillRenderer {
- LOTColorInterpolator *colorInterpolator_;
- LOTNumberInterpolator *opacityInterpolator_;
- BOOL _evenOddFillRule;
- CALayer *centerPoint_DEBUG;
- }
- - (instancetype)initWithInputNode:(LOTAnimatorNode *)inputNode
- shapeFill:(LOTShapeFill *)fill {
- self = [super initWithInputNode:inputNode keyName:fill.keyname];
- if (self) {
- colorInterpolator_ = [[LOTColorInterpolator alloc] initWithKeyframes:fill.color.keyframes];
- opacityInterpolator_ = [[LOTNumberInterpolator alloc] initWithKeyframes:fill.opacity.keyframes];
- centerPoint_DEBUG = [CALayer layer];
- centerPoint_DEBUG.bounds = CGRectMake(0, 0, 20, 20);
- if (ENABLE_DEBUG_SHAPES) {
- [self.outputLayer addSublayer:centerPoint_DEBUG];
- }
- _evenOddFillRule = fill.evenOddFillRule;
-
- self.outputLayer.fillRule = _evenOddFillRule ? @"even-odd" : @"non-zero";
- }
- return self;
- }
- - (NSDictionary *)valueInterpolators {
- return @{@"Color" : colorInterpolator_,
- @"Opacity" : opacityInterpolator_};
- }
- - (BOOL)needsUpdateForFrame:(NSNumber *)frame {
- return [colorInterpolator_ hasUpdateForFrame:frame] || [opacityInterpolator_ hasUpdateForFrame:frame];
- }
- - (void)performLocalUpdate {
- centerPoint_DEBUG.backgroundColor = [colorInterpolator_ colorForFrame:self.currentFrame];
- centerPoint_DEBUG.borderColor = [UIColor lightGrayColor].CGColor;
- centerPoint_DEBUG.borderWidth = 2.f;
- self.outputLayer.fillColor = [colorInterpolator_ colorForFrame:self.currentFrame];
- self.outputLayer.opacity = [opacityInterpolator_ floatValueForFrame:self.currentFrame];
- }
- - (void)rebuildOutputs {
- self.outputLayer.path = self.inputNode.outputPath.CGPath;
- }
- - (NSDictionary *)actionsForRenderLayer {
- return @{@"backgroundColor": [NSNull null],
- @"fillColor": [NSNull null],
- @"opacity" : [NSNull null]};
- }
- @end
|