UIView круговая маска анимации
У меня есть абстрактная странная форма UIView. И мне нужно отобразить плавную анимацию внешнего вида.
Я предполагаю, что должен применить эту анимацию к маске над этим видом. Маска будет иметь форму круга. Таким образом, пользователь увидит последовательность 1'2'3'4'. Как я могу это реализовать? Я полагаю, что я должен применить некоторое аффинное преобразование к представлению маски. В таком случае, какой должна быть первоначальная форма маски? Вертикальная линия?
1 ответ
Решение
Простой пример, предположим, у меня есть 100 * 100 imageview
,
Примечание: для простоты я использую жесткие коды
CAShapeLayer * maskLayer = [CAShapeLayer layer];
maskLayer.bounds = CGRectMake(0, 0, 100, 100);
maskLayer.position = CGPointMake(50, 50);
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50.0, 50.0) radius:50 startAngle:0 endAngle:M_PI *2 clockwise:true];
maskLayer.path = path.CGPath;
maskLayer.fillColor = [UIColor clearColor].CGColor;
maskLayer.strokeColor = [UIColor blackColor].CGColor;
maskLayer.strokeEnd = 0.0;
maskLayer.lineWidth = 100;
self.imageview.layer.mask = maskLayer;
CABasicAnimation * animation = [CABasicAnimation animation];
animation.keyPath = @"strokeEnd";
animation.toValue = @(1.0);
animation.duration = 2.0;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
[maskLayer addAnimation:animation forKey:@"keyFrame"];