在其X轴(水平轴)上旋转UIView

时间:2011-10-07 19:43:26

标签: iphone ios uiview core-animation uiviewanimation

我想在水平轴上旋转UIView达360度,然后刷新视图中的内容。我一直在寻找解决方案。在那里找到了一对夫妇。这就是我的结果。

    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
        self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
    } completion:^(BOOL finished){
        NSLog(@"Finished first pi");
        [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
            self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
        }  completion:^(BOOL finished) {
            NSLog(@"Finished second pi");

        }];           

    }];

这会翻转视图,但只能翻转180度。我希望它再翻一次,以便我能正常看到这个视图..

我的NSLog都会一个接一个地显示出来。我相信我在这里遗漏了一些东西。任何帮助都会有所帮助..

由于

5 个答案:

答案 0 :(得分:9)

在完成块中尝试将新变换与当前变换连接。

self.tableView.layer.transform = CATransform3DConcat(self.tableView.layer.transform, CATransform3DMakeRotation(M_PI,1.0,0.0,0.0));

答案 1 :(得分:2)

您应该检查此答案How to make a CATransform3dMakeRotation rotate the other way? And chain together

我认为您的问题与以下内容有关:“当您直接使用变换时,Core Animation会将变换从当前值插入指定的变换。它将找到获得该变换的最短路径,将限制动画方向。如果您尝试将相同的转换属性设置为两次动画,则第二个值将简单地覆盖第一个,而不是将两个转换组合在一起。“

答案 2 :(得分:1)

使用它: -

  rotatingView.layer.anchorPoint = CGPointMake(0.0f, 0.0f);
    rotatingView.center = CGPointMake(0,
                                       (rotatingView.center.y -
                                        (rotatingView.bounds.size.height/2.0f)));
    rotatingView.center = CGPointMake(0,
                                      (rotatingView.center.y-
                                       (rotatingView.bounds.size.height/2)));

// start the Page Open
[UIView beginAnimations:@"Animation" context:nil];
[UIView setAnimationDuration:13.0];
// set angle as per requirement
[rotatingView.layer setValue:[NSNumber numberWithInt:280]
                   forKeyPath:@"transform.rotation.x"];

[UIView commitAnimations];

答案 3 :(得分:0)

您只需在完成块内将代码从1.0更改为0.0,并且完成所有操作。

 [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
            self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
        } completion:^(BOOL finished){
            NSLog(@"Finished first pi");
            [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
                self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,0.0,0.0,0.0);
            }  completion:^(BOOL finished) {
                NSLog(@"Finished second pi");

            }];           

        }];

答案 4 :(得分:0)

您还可以使用.Repeat.Autoreverse动画选项+设置动画的重复计数来解决此问题。这是Swift中的一个例子:

    UIView.animateWithDuration(time, delay: 0, options: [.Repeat, .Autoreverse], animations: {
        UIView.setAnimationRepeatCount(3)
        self.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 0, 0)
    }) { (completed) in
        // completion
    }