Итак, приведенная анимация:

опрос о заполнении анимации одинCAShapeLayer с другимCAShapeLayer, Итак, я написал некоторый код, который почти достигает моей цели.

Я создал базовый слой и залил его другим. Код ниже:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _shapeLayer = [CAShapeLayer layer];
    [self drawBackgroundLayer];
}
// my main/backgound layer
- (void)drawBackgroundLayer {
    _shapeLayer.frame = CGRectMake(0, 0, 250, 250);
    _shapeLayer.lineWidth = 3;
    _shapeLayer.strokeColor = [UIColor blackColor].CGColor;
    _shapeLayer.fillColor = UIColor.whiteColor.CGColor;
    _shapeLayer.path = [UIBezierPath bezierPathWithRect:_shapeLayer.bounds].CGPath;

    [self.view.layer addSublayer:_shapeLayer];

    [self createCircleLayer];

}

Создайте слой маски в кружке для заливки:

- (void)createCircleLayer {

    _shapeLayer.fillColor = UIColor.greenColor.CGColor;

    CAShapeLayer *layer = [CAShapeLayer layer];

    CGFloat radius = _shapeLayer.bounds.size.width*sqrt(2)/2;

    layer.bounds = CGRectMake(0, 0, 2*radius, 2*radius);

    layer.position = CGPointMake(_shapeLayer.bounds.size.width/2, _shapeLayer.bounds.size.height/2);

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:layer.bounds cornerRadius:radius];
    layer.path = path.CGPath;

    layer.transform = CATransform3DMakeScale(0.1, 0.1, 1);
    _shapeLayer.mask = layer;

}

// наш результат следующий]

Итак, давайте оживим это. Я просто преобразовываю слой, чтобы заполнить весь "_shapeLayer".

- (void)animateMaskLayer:(CAShapeLayer *)maskLayer {

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

    animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1, 1, 1.0)];
    animation.duration = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;
    [newLayer addAnimation:animation forKey:@"transform"];
}

Теперь я хочу сделать то же самое с этим зеленым слоем (залейте его красным цветом). Но когда я использую маску, у меня есть красный круг и белый фон, что очевидно. Моя цель здесь - иметь красный круг и зеленый фон. Вроде нормальная заливка другим цветом. Использование обратной маски не поможет ни тому, ни другому. Так что у меня просто нет идей, как это сделать.

Если вы предлагаете использовать:

[_shapeLayer addSublayer:layer];

это не будет работать, так как будут не только квадратные, но и разные пути, и clipToBounds не вариант.

Спасибо за любую помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос