Мне интересно, можно ли скопировать представление на путь Безье. Я имею в виду, что я хочу видеть представление только в регионе в пределах закрытого пути Безье. Причина этого в том, что у меня контур неправильной формы, и я хочу постепенно заполнять фигуру сплошным цветом сверху вниз. Если бы я мог сделать это так, чтобы определенный вид был видимым только в пути, я мог бы просто создать UIView цвета, который я хочу, а затем, по мере возможности, изменить координату y своего кадра, эффективно заполняя форму. Если у кого-то есть какие-то лучшие идеи о том, как реализовать это, что было бы весьма полезно. Для записи заполнение фигуры будет соответствовать значению y пальца пользователя, поэтому оно не может быть непрерывной анимацией. Спасибо.
Обновление (очень долгое время):
Я попробовал ваш ответ, Роб, и он отлично работает, за исключением одного. Мое намерение состояло в том, чтобы переместить вид в масках, пока маска остается в одном месте на экране. Это так, что я могу создать впечатление, что маска "заполнена" взглядом. Проблема в том, что с кодом, который я написал на основе вашего ответа, когда я перемещаю вид, маска перемещается вместе с ним. Я понимаю, что этого можно ожидать, потому что все, что я сделал, это добавить его в качестве маски представления, поэтому вполне разумно, что он переместится, если вещь, к которой она привязана, движется. Я попытался добавить маску в качестве подслоя супервизора, чтобы он оставался на месте, но это было очень странно. Вот мой код:
self.test = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
self.test.backgroundColor = [UIColor greenColor];
[self.view addSubview:self.test];
UIBezierPath *myClippingPath = [UIBezierPath bezierPath];
[myClippingPath moveToPoint:CGPointMake(100, 100)];
[myClippingPath addCurveToPoint:CGPointMake(200, 200) controlPoint1:CGPointMake(self.screenWidth, 0) controlPoint2:CGPointMake(self.screenWidth, 50)];
[myClippingPath closePath];
CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = myClippingPath.CGPath;
self.test.layer.mask = mask;
CGRect firstFrame = self.test.frame;
firstFrame.origin.x += 100;
[UIView animateWithDuration:3 animations:^{
self.test.frame = firstFrame;
}];
Спасибо за помощь уже.