¿Cómo creo un UIView circular sin problemas de tamaño?

Estoy tratando de crear una UIView que muestre un círculo semitransparente con un borde opaco dentro de sus límites. Quiero poder cambiar los límites de dos maneras: dentro de un-[UIView animateWithDuration:animations:] Bloquear y en un gesto de pellizcar la acción del reconocedor que se dispara varias veces por segundo. He intentado tres enfoques basados ​​en respuestas en otras partes de SO, y ninguno es adecuado.

Configuración del radio de la esquina de la capa de la vista enlayoutSubviews da traducciones suaves, pero la vista no se mantiene circular durante las animaciones; Parece que cornerRadius no es animable.

Dibujando el circulo endrawRect: proporciona una vista circular consistente, pero si el círculo se vuelve demasiado grande, el cambio de tamaño en el gesto de pellizco se vuelve entrecortado porque el dispositivo está gastando demasiado tiempo en volver a dibujar el círculo.

Agregando un CAShapeLayer y configurando su propiedad de ruta enlayoutSublayersOfLayer, que no se anima dentro de las animaciones UIView ya que la ruta no es animable implícitamente.

¿Hay alguna manera de crear una vista que sea siempre circular y que se pueda cambiar de tamaño sin problemas? ¿Hay algún otro tipo de capa que pueda usar para aprovechar la aceleración de hardware?

ACTUALIZAR

Un comentarista me ha pedido que amplíe lo que quiero decir cuando digo que quiero cambiar los límites dentro de un-[UIView animateWithDuration:animations:] bloquear. En mi código, tengo una vista que contiene mi vista de círculo. La vista de círculo (la versión que usa cornerRadius) anula-[setBounds:] Para establecer el radio de la esquina:

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

Los límites de la vista de círculo se establecen en-[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;
}

La vista a veces se redimensiona en animaciones, así:

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

pero durante estas animaciones, si dibujo la vista de círculo usando una capa con una esquina de Radio, tendrá formas divertidas. No puedo pasar la duración de la animación a layoutSubviews, así que necesito agregar la animación correcta dentro de-[setBounds].

Respuestas a la pregunta(4)

Su respuesta a la pregunta