1

我在我的一个视图之上添加了一个子视图,并使用 animateWithDuration 对其进行动画处理,使其从屏幕底部开始并在屏幕顶​​部结束。一切正常,除了animateWithDuration完成后,顶部的视图没有用户交互,而下面的视图仍然有用户交互。如果我删除animateWithDuration,并在其正常位置启动子视图,则用户交互也会按照我的预期工作,这就是为什么我认为animateWithDuration是问题所在。

这是我的代码:

UIViewController *viewController = [[CCouponDetailViewController alloc] init];
[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];

CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);

[UIView animateWithDuration:1.0
     animations:^{
         viewController.view.frame = newFrame;
     }
     completion:^(BOOL finished){
         [viewController didMoveToParentViewController:self];
     }
];

我的另一个问题(不是很重要只是好奇)是在 newFrame 中,我将 y 设置为与我最初设置边界时相同的值,但它会移动。我本来希望 newFrame 要求 ay 值为“0”,但是当我这样做时,什么也没发生。只是想知道为什么会这样。

4

1 回答 1

1

我实际上会倒退这个......

“我的另一个问题(不是很重要,只是好奇)是在 newFrame 中,我将 y 设置为与我最初设置边界时相同的值,但它会移动。我本来希望 newFrame 需要 y 值“0”,但当我这样做时,什么也没发生。只是想知道为什么会这样。

这实际上是您必须回答的一个非常重要的问题,因为它与您的代码为什么不起作用有很大关系。您误解了一些非常重要的概念。

首先,boundsaUIView完全相对于自身确定其位置。frame确定UIView' 在其超级视图中的位置。在您的代码中,您最初设置的是视图bounds,而不是frame--

[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];

- 所以你根本不是最初确定视图在其父视图中的位置,只是与它自身相关。

本质上,您最终会CCouponDetailViewController得到一个 0x0 帧的视图,但是由于您没有指定要UIView剪辑其子视图,因此您的CCouponDetailViewController视图部分实际上并不在它们的视图之上,而是可见并悬在上面的UIView界限。它们不可选择的原因是它们实际上不在UIView.

因此,要解决此问题,请设置您UIView的初始而不是设置边界(我已编辑初始帧以从屏幕底部开始,就像您尝试做的那样。我不明白高度 x -1顺便说一句,您正在尝试做的事情...):

[[viewController view] setFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height, viewController.view.bounds.size.width, viewController.view.bounds.size.height)];

其次,您错误地设置了新框架。您不能以这种方式设置 CGRect:

CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);

相反,使用它进行设置CGRectMake(并且,我再次编辑了 y 值,以便视图最终出现在屏幕顶部,就像您尝试做的那样):

CGRect newFrame = CGRectMake(0, 0, viewController.view.frame.width, viewController.view.frame.height);
于 2014-04-05T16:26:45.097 回答