Использовать путь Безье в качестве обтравочной маски

Я задаюсь вопросом, можно ли обрезать представление по пути Безье. Я имею в виду, что хочу видеть вид только в регионе внутри закрытого Пути Безье. Причина этого в том, что у меня есть контур неправильной формы, и я хочу постепенно заполнить форму сплошным цветом сверху вниз. Если бы я мог сделать так, чтобы определенный вид был виден только внутри пути, то я мог бы просто создать 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;
}];

Спасибо за помощь уже.

Ответы на вопрос(2)

Ваш ответ на вопрос