Cómo mover un controller de vista a lo largo de un círculo en iOS

Soy un nuevo desarrollador de iOS. Quiero crear animation de transición entre el controller de 2 vistas

Como lo puedo hacer ?

aquí está mi código:

int newScreenDegrees = _screenDegrees - 90; [UIView transitionWithView:self.containerView duration:0.65f options:UIViewAnimationOptionCurveEaseInOut animations:^{ for(int i = 0; i < [self.screens count]; i++) { UIViewController *_screen = [self.screens objectAtIndex:i]; int curDeg = newScreenDegrees + i * SPACE_PER_SCREEN; float curRad = convertDegreesToRadians(curDeg); float newX = COORDINATES_CENTER_OF_CIRCLE_X + (CIRCLE_RADIUS * cos(curRad)) - (_screen.view.frame.size.width / 2) - 280; float newY = COORDINATES_CENTER_OF_CIRCLE_Y + (CIRCLE_RADIUS * sin(curRad)) - (_screen.view.frame.size.height / 2); // transform view _screen.view.transform = transformMakeRotateTranslate(convertDegreesToRadians(curDeg + 90), newX, newY); } } completion:^(BOOL finished){ _screenDegrees = newScreenDegrees; // TODO: init content of current view and clear other views }]; _screenDegrees = newScreenDegrees; 

Los problemas son: ver movimiento a lo largo de una línea y no un círculo.

Gracias

aquí está la image: http://i.stack.imgur.com/xVQb3.jpg

Necesita tener múltiples loops y mover la vista de forma individual. Rompe el círculo que te mueve en segmentos lo suficientemente pequeños como para que la vista se mueva de forma circular.

 for(int i = 0; i < [self.screens count]; i++) { UIViewController *_screen = [self.screens objectAtIndex:i]; int newScreenDegrees = i*90; int numSegs=30; //break into little chunks int segSize=3;//3 degrees for (int m=1;m<=numSegs;m++) { [UIView transitionWithView:self.containerView duration:0.65f options:UIViewAnimationOptionCurveEaseInOut animations:^{ int curDeg = newScreenDegrees+m*segSize; float curRad = convertDegreesToRadians(curDeg); float newX = COORDINATES_CENTER_OF_CIRCLE_X + (CIRCLE_RADIUS * cos(curRad)) - (_screen.view.frame.size.width / 2) - 280; float newY = COORDINATES_CENTER_OF_CIRCLE_Y + (CIRCLE_RADIUS * sin(curRad)) - (_screen.view.frame.size.height / 2); _screen.view.transform = transformMakeRotateTranslate(convertDegreesToRadians(curDeg), newX, newY); } completion:^(BOOL finished){ _screenDegrees = newScreenDegrees; // TODO: init content of current view and clear other views }]; } }