Как мне создать круговой UIView с плавным изменением размера?

Я пытаюсь создать UIView, который показывает полупрозрачный круг с непрозрачной границей внутри его границ. Я хочу быть в состоянии изменить границы двумя способами - внутри-[UIView animateWithDuration:animations:] блокировать и с помощью действия распознавателя жеста ущипнуть, которое срабатывает несколько раз в секунду. Я пробовал три подхода, основанные на ответах в других местах, посвященных SO, и ни один из них не подходит.

Setting the corner radius of the view's layer in layoutSubviews gives smooth translations, but the view doesn't stay circular during animations; it seems that cornerRadius isn't animatable.

Drawing the circle in drawRect: gives a consistently circular view, but if the circle gets too big then resizing in the pinch gesture gets choppy because the device is spending too much time redrawing the circle.

Adding a CAShapeLayer and setting its path property in layoutSublayersOfLayer, which doesn't animate inside UIView animations since path isn't implicitly animatable.

Есть ли способ для меня, чтобы создать представление, которое является последовательно круглым и плавно изменяемого размера? Есть ли какой-нибудь другой тип слоя, который я мог бы использовать, чтобы воспользоваться аппаратным ускорением?

ОБНОВИТЬ

Комментатор попросил меня уточнить, что я имею в виду, когда говорю, что хочу изменить границы внутри-[UIView animateWithDuration:animations:] блок. В моем коде у меня есть представление, которое содержит мое представление круга. Представление круга (версия, которая использует cornerRadius) переопределяет-[setBounds:] чтобы установить радиус угла:

-(void)setBounds:(CGRect)bounds
{
    self.layer.cornerRadius = fminf(bounds.size.width, bounds.size.height) / 2.0;
    [super setBounds:bounds];
}

Границы кругового вида установлены в-[layoutSubviews]:

-(void)layoutSubviews
{
    // some other layout is performed and circleRadius and circleCenter are
    // calculated based on the properties and current size of the view.

    self.circleView.bounds = CGRectMake(0, 0, circleRadius*2, circleRadius*2);
    self.circleView.center = circleCenter;
}

Размер представления иногда изменяется в анимации, например, так:

[UIView animateWithDuration:0.33 animations:^(void) {
    myView.frame = CGRectMake(x, y, w, h);
    [myView setNeedsLayout];
    [myView layoutIfNeeded];
}];

но во время этих анимаций, если я рисую круговое представление, используя слой с cornerRadius, получаются забавные формы. Я не могу передать продолжительность анимации в layoutSubviews, поэтому мне нужно добавить правильную анимацию в-[setBounds].

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

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