如何在iOS中沿着圆形移动视图控制器

3
我是一名新手iOS开发者。我想在两个视图控制器之间创建转场动画。
我该怎么做?
以下是我的代码:
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;
问题是:视图沿着一条线移动而不是一个圆形。
感谢您提供的图片:http://i.stack.imgur.com/xVQb3.jpg

我能否将锚点从左下角缓慢移动到右下角?嗯。 - Nam Nguyễn
1个回答

1

您需要使用多个循环并单独移动视图。将您正在移动的圆圈分成足够小的段,这样看起来视图就像是以圆形方式移动。

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

            }];
     }
}

抱歉!但是对我来说它仍然无法工作,我想我会使用计时器。这是我选择的最后一种情况。无论如何,感谢您回答我的问题:D - Nam Nguyễn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接