AnimateWithDuration禁用UIView上的userInteraction

时间:2014-04-05 16:02:53

标签: ios iphone frame childviewcontroller animatewithduration

我在其中一个视图上添加了一个子视图,并将其设置为动画,使其从屏幕底部开始,最后使用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要求y值为“0”但是当我这样做时没有发生任何事情。只是想知道为什么会这样。

1 个答案:

答案 0 :(得分:1)

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

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

这对您来说实际上是一个非常重要的问题,因为它与您的代码无效的原因有很大关系。你误解了一些非常重要的概念。

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

frame

- 所以你根本不是最初在其超级视图中确定视图的位置,而只是与其自身有关。

基本上,您最终会得到一个带有0x0帧的[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)]; 视图,但由于您没有指定希望CCouponDetailViewController剪切其子视图,因此UIView的部分内容为CCouponDetailViewController 1}}视图实际上并不在他们的视图之上,而是可见并悬挂在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);