【问题标题】:Animating a view on top of another view在另一个视图之上动画视图
【发布时间】:2009-08-06 15:44:52
【问题描述】:

我想在我的 iphone 应用程序中的另一个视图之上为视图设置动画。我基本上希望我的视图看起来像苹果键盘,除了我的自定义控件。当我单击一个按钮时,我希望新视图从屏幕底部、部分视图的顶部开始动画。

我该怎么做?

【问题讨论】:

    标签: iphone objective-c cocoa-touch iphone-sdk-3.0


    【解决方案1】:

    只需将视图添加到超级视图的可见框架(您在其上制作动画的视图)之外的某个位置,然后使用动画块更改它的位置。它会向上滑动。

    - (void)addView
    {
        // Obviously this won't compile with cut&paste... you have
        // to supply the actual views.
        UIView* myControlView = // assume this exists somewhere
        UIView* myMainView    = // assume this exists too
        myControlView.frame   = CGRectMake(0, 480, 320, 100); // use real numbers
        [myMainView addSubview:myControlView];
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
        myControlView.frame   = CGRectMake(0, 380, 320, 100);
        [UIView commitAnimations];
    }
    

    还有许多其他方法可以做到这一点。例如,您可以将视图设置在您想要的位置,然后将其翻译到屏幕外以“隐藏”它。当您希望它回来时,在动画块内使用仿射变换再次对其进行变换,它会向上滑动。这种方式对预先布局的视图效果更好一些,例如使用 Interface Builder 等您不一定知道框架的位置是什么,或者它们可能会在其他代码中发生变化。

    【讨论】:

    • 无论如何我可以让它与tableviews一起使用吗?例如,当我单击一行时,屏幕底部会出现一个控件。在 UIScrollView 的子级上使用上面的代码效果不佳。
    • 您必须将类似这样的内容添加到包含滚动视图的视图中,而不是滚动视图本身。实际上,滚动视图和这个控件是同级的,这个控件在使用时是最重要的。
    • 将它添加到包含视图将自动使其成为最重要的。如果它已经在那里,您将在容器视图上调用 bringSubviewToFront:。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多