Swift – Mala calidad de gradiente en la animation de tamaño UIView

Tengo la siguiente estructura en su lugar:

  • La vista principal contiene subview1; la subview1 se presenta usando restricciones
  • subview1 contiene subview2; subview2 también tiene restricciones y necesito animar el tamaño de subview2
  • en subview2 llamo a CGContextDrawRadialGradient para dibujar un círculo con un gradiente

El código en la subview1 es:

let circle = GradientCircle(frame: CGRect(origin: CGPointZero, size: frame.size), withColor: color) addSubview(circle) circle.centerXAnchor.constraintEqualToAnchor(centerXAnchor).active = true circle.centerYAnchor.constraintEqualToAnchor(centerYAnchor).active = true let widthConstraint = circle.widthAnchor.constraintEqualToConstant(frame.width * 3) let heightConstraint = circle.heightAnchor.constraintEqualToConstant(frame.width * 3) circle.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activateConstraints([heightConstraint, widthConstraint]) layoutIfNeeded() UIView.animateWithDuration(3.0, delay: 0, options: [.Repeat], animations: { widthConstraint.constant = 2 heightConstraint.constant = 2 self.layoutIfNeeded() }, completion: nil) 

Aquí hay un gif para mostrar cuál es el problema: http://i.stack.imgur.com/LWP7d.gif

¿Por qué ocurre esta caída en la calidad y cómo puedo solucionarlo? Obviamente, soy nuevo en Swift y no entiendo completamente todo el layout y la animation, así que por favor ayuda, si puedes, me está volviendo loco de forma lenta 🙂

EDITAR:

Aquí está la class GradientCircle (que es subview2 en la descripción anterior), quizás el problema sea cómo se dibuja el gradiente:

 class GradientCircle : UIView { var color: UIColor init(frame: CGRect, withColor: UIColor) { color = withColor super.init(frame: frame) backgroundColor = UIColor.clearColor() } requinetworking init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func drawRect(rect: CGRect) { let context = UIGraphicsGetCurrentContext() let locations: [CGFloat] = [0.0, 1.0] let colorspace = CGColorSpaceCreateDeviceRGB() let colors = [color.CGColor, GraphicsUtils.darkGrayColor().CGColor] let gradient = CGGradientCreateWithColors(colorspace, colors, locations) let startPoint = CGPoint(x: rect.width / 2, y: rect.height / 2) let endPoint = CGPoint(x: rect.width / 2, y: rect.height / 2) let startRadius: CGFloat = 0 let endRadius: CGFloat = rect.width / 2 CGContextClearRect(context, rect) CGContextDrawRadialGradient(context, gradient, startPoint, startRadius, endPoint, endRadius, CGGradientDrawingOptions.DrawsAfterEndLocation) }