繁体   English   中英

AnimateWithDuration禁用UIView上的userInteraction

[英]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”,但是当我这样做时,什么也没发生。只是想知道为什么会这样。”

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

首先, UIViewbounds完全确定其相对于自身的位置。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM