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