[英]AnimateWithDuration disables userInteraction on UIView
我在其中一个视图的顶部添加了一个子视图,并对其进行了动画处理,从而使其通过使用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”,但是当我这样做时,什么也没发生。 只是想知道为什么。
我实际上会退后一步...
“我还有一个问题(不是很重要,只是好奇)是,在newFrame中,我将y设置为与最初设置边界时相同的东西,但是它仍然可以移动。我希望newFrame要求ay值表示“ 0”,但是当我这样做时,什么也没发生。只是想知道为什么会这样。”
对于您来说,这实际上是一个非常重要的问题,因为它与您的代码为何无法正常工作有很大关系。 您误解了一些非常重要的概念。
首先, UIView
的bounds
完全确定其相对于自身的位置。 该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)];
-因此,您根本不是在确定视图在其父视图中的位置,而只是确定与它本身的关系。
本质上,您最终得到一个带有0x0框架的CCouponDetailViewController
视图,但是由于您未指定要让UIView
裁剪其子视图,因此CCouponDetailViewController
视图的部分实际上不在其视图顶部,而是可见的并悬在UIView
的边界上。 之所以不能选择它们,是因为它们实际上不在UIView
。
因此,要解决此问题,请设置UIView
的初始框架,而不要设置边界 (我正在尝试按照您的UIView
将初始框架编辑为从屏幕底部开始。我不知道x的高度-顺便说一句,您正在尝试做的事情...):
[[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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.