Показать анимацию двух фигур

У меня есть CircleView : UIView класс, который оживляет (сжимается и растет), когда вы касаетесь его (через pop функция). Я также хотел бы, чтобы при прикосновении к нему появлялся и рос круг (например, водная рябь). (Эффект, о котором я говорю, показан здесь в CSS)

Как мне это сделать?

Еще немного информации:

  • В идеале обе анимации будут управляемы с одного CircleView учебный класс
  • CircleView наследуется UIView

Обновить

Основываясь на ответах, я добавил новый объект через subLayer, Это показывает нормально, но это не оживляет во время pop, Может кто-нибудь помочь мне понять, почему?

Вот мой текущий код (все равно соответствующие биты)

- (void)layoutSubviews
{
    [self setLayerProperties];
}

- (void)setLayerProperties {
//The view’s Core Animation layer used for rendering.
CAShapeLayer *layer = (CAShapeLayer *)self.layer;

UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)
                                                  byRoundingCorners:UIRectCornerAllCorners
                                                        cornerRadii:self.frame.size];
layer.path = bezierPath.CGPath;
layer.fillColor = _Color.CGColor;

rippleLayer = [[CALayer alloc] init];
layer.path = bezierPath.CGPath;
layer.strokeColor = [UIColor blueColor].CGColor;
[layer addSublayer:rippleLayer];
}

// Does the animated "pop"
- (void)pop{

    CABasicAnimation *animation = [self animationWithKeyPath:@"transform.scale"];
    [animation setFromValue:[NSNumber numberWithFloat:1.0f]];
    [animation setToValue:[NSNumber numberWithFloat:0.8f]];
    [animation setRemovedOnCompletion:YES];
    [animation setDuration:0.15];
    [animation setAutoreverses:YES];

    [self.layer addAnimation:animation forKey:animation.keyPath];

    rippleLayer.anchorPoint = CGPointMake(1, 1);
    CABasicAnimation *scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    [scale setFromValue:[NSNumber numberWithFloat:1.0f]];
    [scale setToValue:[NSNumber numberWithFloat:2.0f]];
    [scale setRepeatCount:1];
    [scale setDuration:1.0f];
    //r[scale setRemovedOnCompletion:YES];
    [scale setFillMode:kCAFillModeForwards];

    [rippleLayer addAnimation:scale forKey:scale.keyPath];
}

1 ответ

Просто добавьте другие объекты, которые вы хотите анимировать на свой слой и установите их альфа на 0.0. Затем вы можете играть с этим значением в или непосредственно перед вашей анимацией.

Я заметил, что вы не следовали соглашению об именовании переменных с небольшим начальным значением. _color было бы предпочтительнее _Color,

Кроме того, если вы хотите перевести слой в исходное состояние, вы обычно используете матрицу идентифицирующего преобразования:

self.transform = CGAffineTransformIdentity;
Другие вопросы по тегам