【问题标题】:Change between UIViewcontroller.view subviews with animation使用动画在 UIViewcontroller.view 子视图之间切换
【发布时间】:2011-12-22 14:59:43
【问题描述】:

我有一个包含两个视图(redView、blueView)的视图控制器。视图小于主视图。

我想通过动画从 redView 更改为 blueView。如果使用这个没有动画发生。

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                       forView:redView cache:YES]; // !!! I WILL CHANGE THIS

[self.view addSubview:blueView];
[redView removeFromSuperview];

[UIView commitAnimations];

如果我将代码更改为这个,那么动画就可以了,但整个 mainView 都会动画,这是我不希望发生的事情。我只想翻转子视图。我应该注意到 2 个子视图处于相同的位置。 (框架)有什么想法吗?

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                       forView:self.view cache:YES];

[self.view addSubview:blueView];
[redView removeFromSuperview];

[UIView commitAnimations];

【问题讨论】:

    标签: iphone cocoa-touch animation uiview subview


    【解决方案1】:

    使用块动画而不是简单动画,来自苹果关于简单动画“在iOS 4及更高版本中不鼓励使用本节中的方法”

    方块动画

    [UIView transitionWithView:containerView
                      duration:1.25
                       options:UIViewAnimationOptionTransitionFlipFromRight
                    animations:^
    { 
    
                        [redView removeFromSuperview]; 
                        [containerView  addSubview:blueView];
    
                    }
                    completion:NULL];
    

    containerView : 是动画的主视图。 还要添加到您的 containerView redView, 这一切:) 欲了解更多信息,请查看

    http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

    【讨论】:

      【解决方案2】:

      找到的解决方案:

      我使用一个 tempView 来制作动画。在 tempView 上,我添加了 view1 和 view2。

      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:1.0]; 
      [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:tempView cache:YES];
      [tempView addSubview:view2]; 
      [view1 removeFromSuperview];
      [UIView commitAnimations];
      

      额外:为了更好的动画你可以使用 view1.visible = YES , NO 代替 addSubview, removeFromSuperView,但是它们会一直被分配

      【讨论】:

        【解决方案3】:

        在您的第一个示例中,您似乎在动画之前删除了 redView,请尝试在动画之后将其删除。

        代码:

        [UIView setAnimationDidStopSelector:@selector(removeRedViewFromSuperview)];
        

        【讨论】:

        • 感谢您的帮助,但没有成功。我找到了解决方案。 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:tempView cache:YES]; [tempView addSubview:view2]; [view1 removeFromSuperview]; [UIView 提交动画];
        • 由于我的声誉,我还不能发布它
        猜你喜欢
        • 1970-01-01
        • 2017-02-26
        • 1970-01-01
        • 2020-04-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多