【问题标题】:UiView Transition inside UIViewUIView 内的 UIView 过渡
【发布时间】:2010-12-06 16:17:07
【问题描述】:

这感觉像是一个初学者的问题,但由于我无法让它以预期的方式工作,我希望那里的某个地方能够为我指明正确的方向。

我想要实现的是视图内部视图的转换。 我基本上想用另一个视图(控制器?!?)的内容替换视图中的视图。

可以说,我有一个书的图像,我想在书内转换到另一个页面(例如从日历视图到详细的每日视图)。我只希望“书籍内容”(白色内容区域)包含在该过渡中,而不是整本书本身(整个屏幕)。

我可以使用相同的视图进行转换,没问题,但我无法使用完全不同的视图替换视图。 在单独的视图控制器中拥有视图,或者在一个视图控制器中拥有所有视图都没有关系,所以我还不能让它工作,但更糟糕的是,我已经没有想法了。 所以帮助!如果请外面的人可以这么好心,告诉我我做错了什么。 建议也非常感谢。 谢谢!!

汤姆

【问题讨论】:

    标签: iphone objective-c ipad uiviewcontroller interface-builder


    【解决方案1】:

    也许您可以隐藏一个视图,然后使用 UIView 动画块显示另一个视图。

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view1.view cache:YES];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view2.view cache:YES];
    [UIView setAnimationDuration: 1.5];
    [UIView commitAnimations];
    
    view1.view.hidden = YES;
    view2.view.hidden = NO;
    

    编辑:这是你要找的吗?

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
    [view1 viewWillDisappear:YES];
    [view2 viewWillAppear:YES];
    
    view1.view.hidden = YES;
    view2.view.hidden = NO;
    [view1 viewDidDisappear:YES];
    [view2 viewDidAppear:YES];
    [UIView commitAnimations];
    

    或者,你可以这样使用:

    [UIView animateWithDuration:0.5
                      delay:0.0 
                    options:UIViewAnimationOptionTransitionFlipFromRight 
                 animations:^{
                                 [view1 removeFromSuperview];
                                 [mySuperview addSubview:view2]; 
                             }
                 completion:nil];
    

    【讨论】:

    • 嗨,伙计,是的,这就是我要找的。这只不起作用,意味着 view1 消失,直到 view2 突然出现。顺便说一句,这种做法已被苹果公司弃用。我想知道如何使用基于块的动画设置动画停止代理??!?
    • 是的,有办法,我去找找,今天晚些时候告诉你。
    • 嗨,伙计,谢谢你的时间。试一试,没有按预期工作..当我有时间时,我必须回去。还是谢谢大家
    【解决方案2】:

    查看UIView class 中的exchangeSubviewsAtIndex: 方法。只需将要转换的 2 个视图设置为另一个视图的子视图;然后在该父视图上调用此方法。

    【讨论】:

    • 我错过了那个方法,但对我不起作用。无论如何感谢您的回答!
    【解决方案3】:

    假设您有一个具有两个视图 A 和 B 的视图控制器。它们具有相同的框架,因此它们在控制器视图中占据相同的空间,用于显示一本书的页面。您想显示一个并过渡到另一个。

    一种方法是将一个的 alpha 属性设置为 1.0(不透明),将另一个设置为 0.0(透明)。因为这个属性可以被动画化,所以你可以使用 beginAnimations:context/commitAnimations 进行从一个到另一个的淡入淡出,或者使用文档建议的块方法之一。

    另一种方法是在两个视图中对帧的变化进行动画处理。设置视图,使一个视图具有一个框架,使其在正确的位置显示,另一个具有相同的框架但 frame.origin.x 等于 frame.size.width - 因为它已关闭,所以它将被隐藏-屏幕或隐藏在其他视图后面。通过将视图 A 的 frame.origin.x 设置为 -frame.size.width 并将框架 B 的 frame.origin.x 设置为显示位置 x 原点来为框架设置动画。然后将(无动画)帧 A 的 frame.origin.x 再次设置为 frame.origin.width,更新其内容,您就可以从右侧滑入另一个页面了。

    【讨论】:

    • 嗨,伙计,感谢您的回答。我现在能够在所需的内容区域内进行“过渡”(但不是真的)。但是我暂时没有做任何动画,因为我现在没有更多时间做这个。如果我使用单视图执行 transitionflip 动画,它会翻转页面并让我刷新视图。这正是我在用另一种视图替换一个视图时想要的……放开一个视图,翻开血腥​​的页面(动画)并取回新视图。虽然不能让它工作....
    • 嗨,汤姆。在视频游戏中,通常会进行“双缓冲”,显示一个视图,同时更新一个隐藏的视图——翻转,更新隐藏的视图,重复。您是保持相同的两个视图还是尝试发布一个并创建一个新视图?我真的认为使用 UIViewAnimationTransitionFlipFromRight 显示的答案将满足您的需求。
    猜你喜欢
    • 2012-10-28
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多