Я собираюсь открыть меню с круговой анимацией масштабирования. Для этого я сначала устанавливаю маску радиусом с радиусом 0 в начале.CABasicAnimation Circular Mask Show Scaling Path Animation
#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 * M_PI)
CAShapeLayer *mask = [CAShapeLayer new];
mask.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(25, 25) radius:0 startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:YES].CGPath;
self.layer.mask = mask;
Затем я оживляю новую маску с помощью CABasicAnimation.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
animation.toValue = (id)[UIBezierPath bezierPathWithArcCenter:CGPointMake(25, 25) radius:self.frame.size.height*1.2 startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:YES].CGPath;
animation.removedOnCompletion = NO;
animation.duration = 0.45f;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[self.layer.mask addAnimation:animation forKey:nil];
На первый взгляд это работает, но проблема в том, что сама анимация более овальной формы, чем круговая: http://i.stack.imgur.com/fqPYJ.png
код вдохновлен Animate circular mask of UIImageView in iOS.
Здравствуйте! Спасибо за ответ! Я изменил цвет и обновил изображение, теперь это должно быть ясно. Я не использую никаких преобразований ... Только код, указанный выше. – Oskar
Исправлено использование метода bezierPathWithOvalInRect вместо bezierPathWithArcCenter. Благодаря!! – Oskar