У меня есть класс CircleView : UIView
, который анимирует (сжимается и растет), когда вы касаетесь его (через функцию pop
). Я также хотел бы, чтобы поглаженный круг появлялся и вырастал (как основная водяная рябь), когда вы касаетесь его тоже. (Эффект, о котором я говорю, показан here in CSS)Отображение анимации двух фигур
Как мне это сделать?
Некоторые больше информации:
- В идеале обе анимации будет управлять с одного
CircleView
класса CircleView
наследует отUIView
Update
На основе ответов у меня есть добавлен новый объект через 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];
}
Вы можете сделать много вещей внутри анимации блокировки, вы не ограничены только регулировки одного одно свойство. Если второй эффект, который вы желаете, вписывается во временные ограничения, просто создайте несколько операторов. В противном случае попробуйте вызывать несколько анимаций подряд, метод не ждет каждого блока завершения, он будет отключать их всех в последовательности, с задержкой в миллисекундах. Для многих эффектов эта задержка полностью неотличима от одновременной. –
Спасибо Райан, я знаю, что могу делать мультипольные вещи в блоке анимации, я полагаю, что реальный вопрос заключается в том, как добавить еще один «объект» для анимации? – Chris
Обычно представление, которое вы называете анимацией, будет родителем многих подзонов, которые вы анимации. Ваш пример анимирует себя, но вы можете анимировать любое свойство любого объекта, на который вы ссылаетесь (при условии, что это анимационное свойство ...) –