¿Cómo animo una UIView a lo largo de una ruta circular?

En el código Swift, ¿cómo puedo comenzar y animar una UIView para que se mueva en un movimiento a lo largo de una ruta circular y luego terminarla con gracia? ¿Es posible lograr esto usando una animation CGAffineTransform ?

He preparado un GIF a continuación que muestra el tipo de animation que bash lograr.

introduzca la descripción de la imagen aquí

Use UIBezierPath y CAKeyFrameAnimation .

Aquí está el código:

 //The code is within viewDidLoad method let circlePath = UIBezierPath(arcCenter: CGPointMake(CGRectGetMidX(view.frame), CGRectGetMidY(view.frame)), radius: 20, startAngle: 0, endAngle:CGFloat(M_PI)*2, clockwise: true) let animation = CAKeyframeAnimation(keyPath: "position"); animation.duration = 1 animation.repeatCount = MAXFLOAT animation.path = circlePath.CGPath let squareView = UIView() //whatever the value of origin for squareView will not affect the animation squareView.frame = CGRectMake(0, 0, 50, 50); squareView.backgroundColor = UIColor.lightGrayColor() view.addSubview(squareView) // You can also pass any unique string value for key squareView.layer.addAnimation(animation, forKey: nil) // circleLayer is only used to locate the circle animation path let circleLayer = CAShapeLayer() circleLayer.path = circlePath.CGPath circleLayer.strokeColor = UIColor.blackColor().CGColor circleLayer.fillColor = UIColor.clearColor().CGColor view.layer.addSublayer(circleLayer) 

Aquí está la captura:

introduzca la descripción de la imagen aquí

Además, puede establecer la propiedad anchorPoint de squareView.layer para que la vista no sea animada anclada en su centro. El valor pnetworkingeterminado de anchorPoint es (0.5, 0.5), que significa el punto central.