gpt4 book ai didi

ios - UIPopoverController 拖放

转载 作者:行者123 更新时间:2023-12-01 19:27:15 27 4
gpt4 key购买 nike

我有一个问题,this question 的回答最多。 .

但是,我的任务略有不同。我想将 UIImageViews 从 UIPopover Controller 拖放到另一个 UIView,但弹出框中包含的 ImageView 数量超过了 iPad 的高度,这意味着用户还必须能够滚动弹出框的内容(显示在 UITableView 中)。

我正在使用 UIPanGestureRecognizer 来检测拖放的尝试,但这实际上通过拦截事件来禁用滚动。我想我知道如何处理这个问题。滚动本质上是一种垂直移动,而拖放更像是一种横向移动。所以,我在想,当我检测到拖放的开始时,我必须检测它是否主要是垂直移动。如果是这样,我必须以某种方式触发滚动并将 Action 传递给那个“处理程序”。

任何 a)关于这是否是正确方法的反馈,以及 b)关于实现的任何指针?

最佳答案

我成功地完成了这个并想分享解决方案。

因为我们正在处理 UIPopoverController 中的 UITableView,所以您必须处理的第一个问题是用户可能只想滚动 tableview,而不是拖动其中一个单元格的内容(在本例中为 UIImageView) .我通过将自定义手势识别器附加到我的自定义 ImageView 类来解决这个问题,这意味着加载到表格 View 中的每个 ImageView 都附加了一个自定义手势识别器。

该手势识别器的关键在于 touchesMoved 方法中的以下代码:

if (ABS(currentTouchLocation.y-self.firstTouchLocation.y) > 4 && ABS(currentTouchLocation.x-self.firstTouchLocation.x)< 2)
{

self.state = UIGestureRecognizerStateFailed;

}

导致手势识别器失败允许触摸事件正常进行到表格 View 。使用 > 4 和 < 2 条件可以控制将操作视为垂直滚动与拖放的角度。

其余代码位于手势的 action 方法中。在这里,您要做的第一件事是创建 tableview 单元格的 ImageView 的副本并将其添加到主窗口:
self.newImageView =  [[ElementImageView alloc] initWithImage:self.image];
self.newImageView.frame = [self.superview convertRect:self.frame toView:[UIApplication sharedApplication].keyWindow];

[[UIApplication sharedApplication].keyWindow addSubview:self.newImageView];

在这一点上,我最挣扎。我一直在尝试找到一种方法将触摸转移到这个新的 ImageView ,或者以某种方式以编程方式触发触摸,这样我的拖动 Action 就可以无缝地进行。这是完全没有必要的。拖动是通过将其关联触摸的第一个位置与最新位置之间的 x/y 增量应用于您的 View 来实现的。相反,我只是将原始 ImageView 留在原处并将增量应用于我的副本。

如果您遵循这种方法,您可以轻松地将 UIImageView 的副本从 UITableView/UIPopOverController 拖动到屏幕上的任何位置。

关于ios - UIPopoverController 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479347/

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