Я хотел бы реализовать анимации перехода между двумя UIView в зависимости от материала конструкции, как показано на скриншоте ниже (первая часть только анимации):Добавление шкалы анимации для CAShapeLayer
Но я бы как сделать его более реалистичным с применением анимированной маски для UIView. Вот код, который я разработал:
- (IBAction)onButtonTapped:(UIButton *)sender
{
// 1. make a hole in self.view to make visible another view
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
[maskPath appendPath:[UIBezierPath bezierPathWithArcCenter:sender.center
radius:sender.frame.size.width/2.0f
startAngle:0.0f
endAngle:2.0f*M_PI
clockwise:NO]];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.fillColor = [UIColor blackColor].CGColor;
maskLayer.path = maskPath.CGPath;
// 2. add scale animation for resizing hole
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.fromValue = [NSValue valueWithCGRect:sender.frame];
animation.toValue = [NSValue valueWithCGRect:self.view.bounds];
animation.duration = 3.0f;
[maskLayer addAnimation:animation forKey:@"scaleAnimation"];
self.view.layer.mask = maskLayer;
}
Моя идея добавляет «дыру» в модальный UIView, а затем масштабирует остроумие.
Проблема в том, что она не работает должным образом. Первая часть кода делает отверстие хорошо. Но масштабирование анимации дыры не работает вообще.
По-прежнему не работает, как показано на скриншоте выше – Sergio