Итак, приведенная анимация:
опрос о заполнении анимации один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 не вариант.
Спасибо за любую помощь!