如何从UIView的右上角旋转/动画旋转90度?

7

我已经搜索了几个小时,尝试找到一种方法来从右上角将UIView旋转90度进行动画处理。

这种效果应该类似于从屏幕顶部的门摆动。

希望有人可以帮忙!

3个回答

25

我按下回车键后,突然恍然大悟,想到了节拍器示例的工作原理有点像摇摆门,这启发了我想到了其他几种可能性。

以下是我的解决方案:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Set the anchor point and center so the view swings from the upper right
    swingView.layer.anchorPoint = CGPointMake(1.0, 0.0);
    swingView.center = CGPointMake(CGRectGetWidth(self.view.bounds), 0.0);

    // Rotate 90 degrees to hide it off screen
    CGAffineTransform rotationTransform = CGAffineTransformIdentity;
    rotationTransform = CGAffineTransformRotate(rotationTransform, DegreesToRadians(90));
    swingView.transform = rotationTransform;
}

...

- (void)animateSwing {

    CGAffineTransform swingTransform = CGAffineTransformIdentity;
    swingTransform = CGAffineTransformRotate(swingTransform, DegreesToRadians(0));

    [UIView beginAnimations:@"swing" context:swingView];
    [UIView setAnimationDuration:0.25];

    swingView.transform = swingTransform;

    [UIView commitAnimations];
}
希望这也能帮到其他人!

顺便说一句,这个答案让我找到了Metronome示例中不同的动画。我认为它更加简洁。https://dev59.com/M3NA5IYBdhLWcg3wgeSk#930101 - dandax
2
#define DEGREES_RADIANS(angle) ((angle) / 180.0 * M_PI) - jeet.chanchawat

0
你应该尝试将图层的锚点设置为(0,1),然后再对图层进行动画处理。

我发现layer.anchorPoint和view.center是罪魁祸首,就在我发布问题后不久。感谢您的快速回复! - dandax

-4
你应该尝试这段代码:
-(void)doRotationView{
[UIView beginAnimations:@"flipping view" context:nil];  
    [UIView setAnimationDuration:1];    
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];   
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft    
                           forView:self cache:YES];
    if (flagFront == 1) {
        flagFront =0;
        [self.viewSecond setHidden:NO];
        [self.viewFirst setHidden:YES];
    }
    else{
        flagFront =1;
        [self.viewSecond setHidden:YES];
        [self.viewFirst setHidden:NO];        
    }
    [UIView commitAnimations];

}


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