gpt4 book ai didi

ios - AnimateWithDuration 在 UIView 上禁用 userInteraction

转载 作者:行者123 更新时间:2023-11-29 12:48:58 25 4
gpt4 key购买 nike

我在我的其中一个 View 之上添加了一个 subview ,并使用 animateWithDuration 对其进行动画处理,使其从屏幕底部开始并在屏幕顶​​部结束。一切正常,除了在 animateWithDuration 完成后,顶部的 View 没有用户交互,下面的 View 仍然有用户交互。如果我删除 animateWithDuration,并且只是在其正常位置启动 subview ,用户交互也会按照我的预期进行,这就是为什么我认为 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”,但是当我这样做时什么也没有发生。只是想知道为什么会这样。

最佳答案

我实际上会在这个问题上倒退......

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

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

首先,UIViewbounds 决定了它完全相对于自身的位置。 frame 确定 UIView 在其父 View 中的位置。在您的代码中,您最初设置的是 View 的 bounds,而不是 frame --

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

-- 所以您最初根本没有确定 View 在其父 View 中的位置,而只是与其自身有关。

本质上,您最终会得到一个带有 0x0 帧的 CCouponDetailViewController View ,但是由于您没有指定您希望 UIView 剪辑其 subview , CCouponDetailViewController View 的部分实际上并不在其 View 之上,而是可见并悬在 UIView 的边界之上。它们不可选的原因是因为它们实际上不在 UIView 中。

因此,要解决此问题,请设置 UIView 的初始 frame 而不是设置 bounds(我已将初始帧编辑为从屏幕底部开始,就像您正在尝试做的那样。顺便说一下,我不明白您正在尝试做的高度 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 值,以便 View 像您尝试的那样最终位于屏幕顶部):

CGRect newFrame = CGRectMake(0, 0, viewController.view.frame.width, viewController.view.frame.height);

关于ios - AnimateWithDuration 在 UIView 上禁用 userInteraction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com