gpt4 book ai didi

iOS >> 拖动 View 跳回原始位置 >> Auto Layout 结合 UIPanGestureRecognizer 问题

转载 作者:技术小花猫 更新时间:2023-10-29 10:23:52 26 4
gpt4 key购买 nike

我有几个用户应该能够拖放的 UIView。我使用 UIPanGestureRecognizer 来管理 d&d 操作(参见下面的代码)。 d&d Action 运行良好,但是当我开始拖动另一个 UIView 时,我刚刚放下的那个 UIView 正在跳回其原始位置。

- (void)handlePan:(UIPanGestureRecognizer *)recognizer {

CGPoint translation = [recognizer translationInView:self.view];

switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
for (UIView* checkView in dragAndDropImageViewsArray) {
if (checkView == recognizer.view) {
[checkView.superview bringSubviewToFront:checkView]; //this is done to make sure the currently dragged object is the top one
}
}
break;

case UIGestureRecognizerStateChanged:
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
break;

case UIGestureRecognizerStateEnded:
NSLog(@"UIGestureRecognizerStateEnded");
break;

default:
break;
}

[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

}

我尝试了几种“解决”问题但导致其他问题的方法:

  • 取消自动布局:这完全解决了问题,但现在我必须开始计算和管理不同设备和方向的对象位置和大小。
  • 使用 layer.zPosition 而不是 bringSubviewToFront:这使得对象出现在其他对象之上,同时显然避免了“跳回”,但不允许我更改不同可拖动对象之间的层次结构。

我开始加深对自动布局的理解,但在我看来我要寻找的东西应该非常简单时,它变得非常复杂;我看到许多处理执行“重新自动布局”的方法,但我不清楚如何使用它们。

这里有简单的解决方案吗?比如调用覆盖 IB 自动布局约束的方法并根据 UIView 新位置重新定义它们?

如有任何帮助,我们将不胜感激。

最佳答案

我认为,如果您正在使用自动布局并且想要更改 View 的位置,则需要更新 View 上的约束,而不是手动设置 View 的中心。从描述来看,这听起来像是您正在设置中心,但是当应用接下来布置 View 时(例如,您拖动另一个 View ),它会将中心重新设置为自动布局规定的任何位置。

我不确定你的应用程序的其余部分是什么样子,但你可以找到附近的 View 并为其添加约束,或者你可能更愿意只更新拖动 View 的约束并设置前导空间和顶部空间手动到 super View 。如果您手边有一个集合,您还可以清除所有约束,然后重新添加它们,因为您希望在 View 之间保持填充。

要在代码中设置约束,您可以清除移动 View 的约束并重新添加它们,或者如果您在 IB 中有一个 View ,您可以将约束拖到代码中以创建一个导出。查看 removeConstraints 和 addConstraints 方法以在代码中执行此操作。

最后,如果它在没有自动布局的情况下按照您喜欢的方式工作,您可以尝试在移动的 View 上设置 translatesAutoresizingMaskIntoConstraints = YES,但请注意这可能会在其他地方引起冲突。

关于iOS >> 拖动 View 跳回原始位置 >> Auto Layout 结合 UIPanGestureRecognizer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16129988/

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