0

我在情节提要中创建了一个 UIView。请参阅此处了解更多信息。我的问题是,当用户“登录”时,我会呈现一个新视图,将其从屏幕左侧带入,主视图会滑向左侧,就像推送导航一样,但都是以编程方式进行的。

所以我决定使用以下代码为这个“导航”设置动画。view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; view.backgroundColor = [UIColor whiteColor];

//add stuff to view
[view addSubview: label];

view.frame = CGRectMake(320, 0, 0, 480);
view.clipsToBounds = YES;

[self.view addSubview:view];

//show view
[UIView animateWithDuration:.5
                 animations:^{
                     self.view.frame = CGRectMake(0,0,0,480); //move self.view off left
                     view.frame = CGRectMake(0, 0, 320, 480); //move new view in place
                 }];

我的视图已成功显示,但现有视图self.view并没有像我想要的那样离开屏幕左侧。它移动,但它不带它的组件...当我在动画中注释掉时//view.frame - CGRectMake(0,0,320,480);,所以我不显示新视图,我在登录时在模拟器中得到了这个。

视图的白色背景会离开屏幕,但组件不会。这会导致一个问题,因为当我将两者放在一起时,它看起来不像“新视图”正在像导航推送控制器那样替换旧视图,而是在它上面滑动。self.view当我将这些组件移出屏幕时,有没有办法移动这些组件

谢谢您的帮助!

4

1 回答 1

0

我不确定你是否可以移动self.view。即使有可能,这也不是一个好主意……

无论如何你的代码

self.view.frame = CGRectMake(0,0,0,480);

滑动视图。它将视图缩放为一个宽度为零的矩形,这解释了为什么它的子视图仍然存在。默认情况下,子视图与其父视图的左上角对齐,并且由于self.view的​​左上角没有移动(仍然是 (0, 0)),因此它们保持不变。将视图滑出屏幕的正确方法是:

self.view.frame = CGRectMake(-320,0,320,480); // width & height MUST remain unchanged

尽管如此,这仍然行不通,因为您已经制作view 了 ... 的子视图, self.view这意味着这一行:

view.frame = CGRectMake(0, 0, 320, 480);

将设置view.frame相对于self.view现在已从屏幕上滑出的位置!所以他们都会消失。你不应该玩的另一个很好的理由self.view.frame

恕我直言,您应该创建一个视图 v1 作为主视图,并创建一个 v2 作为登录时出现的视图。使它们成为子视图self.view,将 v2 隐藏在 v1 后面,当用户登录时,如上所述将 v1 滑出屏幕。或者可能将 v1 放在 v2 的右侧,然后将它们都滑动(因此 v1 将滑出,为什么 v2 会滑入,类似于导航控制器)。

于 2013-06-21T07:13:29.823 回答