【问题标题】:How do I animate/rotate a UIView 90 degress from its upper right corner?如何将 UIView 从其右上角设置动画/旋转 90 度?
【发布时间】:2011-05-03 14:45:54
【问题描述】:

我一直在寻找几个小时试图找到一种方法来动画/旋转 UIView 从右上角 90 度。

效果应该就像从屏幕顶部打开的门一样。

希望有人可以提供帮助!

【问题讨论】:

    标签: ios uiview rotation core-animation transform


    【解决方案1】:

    所以在我按下 Enter 键后,我突然将两个和两个放在一起,发现 Metronome 样本有点像一扇旋转门,这让我想到了其他一些可能性。

    这是我的解决方案:

    - (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];
    }
    

    希望这对其他人也有帮助!

    【讨论】:

    • 顺便说一句,这个答案让我得到了与节拍器样本不同的动画。我认为它更干净一些。 stackoverflow.com/questions/929364/…
    • #define DEGREES_RADIANS(angle) ((angle) / 180.0 * M_PI)
    【解决方案2】:

    您应该尝试将图层的锚点设置为 (0,1),然后为图层设置动画。

    【讨论】:

    • 我发现 layer.anchorPoint 和 view.center 是我发布问题后不久的罪魁祸首。感谢您的快速回复!
    【解决方案3】:

    你应该试试这个代码:

    -(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];
    

    }

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 2020-08-29
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2010-11-21
      • 2012-12-23
      • 1970-01-01
      相关资源
      最近更新 更多