OStack程序员社区-中国程序员成长平台

标题: objective-c - ViewController 只调用一次 touchesMoved [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 16:19
标题: objective-c - ViewController 只调用一次 touchesMoved

我已经搜索过一个问题,但找不到明确的答案。这是我的布局:

UIView - ViewController   
   |_UIScrollView - added programatically
      | |_UIView to hold a backgound/perimeter  - added programmatically
      |_UIView 1 - added programmatically
      |_UIView 2 - added programmatically
       and so on

我的问题是,当我移动说 UIView 2 on touch 时,为什么 ViewController 只调用一次“touchesMoved”?

现在 UIView 有它自己的 touchesMoved 方法,但我需要调用 Controller 的 touchesMoved,因为我需要它与 ScrollView 对话以更新其位置。比如当那个 UIView 2 靠近拐角的时候,让 ScrollView 稍微移动一下就可以完全显示 UIView 2。

如果没有办法解决这个问题,有没有办法从 UIView 2 更新 ScrollView 以在靠近角落时滚动?

编辑:

我想我可能已经找到了解决办法。不确定这是否会被 Apple 接受,但是:

我刚刚调用了一个实例变量,即 = self.superview,然后我可以在 UIView 的 touchesMoved 中与我的 ScrollView 对话

因为我可以调用方法 [ScrollView setContentOffsetCGPoint)contentOffset animatedBOOL)animated] 所以当 subview (UIView2) 靠近 UIWindow 的边缘时,我的 ScrollView 会得到更新。

感谢您的建议。



Best Answer-推荐答案


您描述的行为是 UIScrollView 劫持触摸移动事件的结果。换句话说,一旦 UIScrollView 检测到触摸移动事件落在其框架内,它就会控制它。我在尝试创建一个特殊的滑动处理程序时遇到了同样的行为,每次 UIScrollView 也对滑动感兴趣时它都会失败。

在我的例子中,我通过拦截 sendEvent: 中的事件解决了这个问题,该事件在我的自定义 UIWindow 中被覆盖,但我不知道你是否想这样做相同的。无论如何,这对我有用:

- (void)sendEventUIEvent*)event {
NSSet* allTouches = [event allTouches];
UITouch* touch = [allTouches anyObject];
UIView* touchView = [touch view];

//-- UIScrollViews will make touchView be nil after a few UITouchPhaseMoved events;
//-- by storing the initialView getting the touch, we can overcome this problem
if (!touchView && _initialView && touch.phase != UITouchPhaseBegan)
    touchView = _initialView;

    //-- do your own management of the event

    //-- let the event propagate if you want also the default event management
[super sendEvent:event];

}

您可能会研究的另一种方法是将 手势识别器 附加到您的 View - 它们具有相当高的优先级,因此 UIScrollView 可能不会干扰它们,它可能对您更有效.

If there is no way around this is there a way to update ScrollView from UIView 2 to scroll when its near a corner?

您是否尝试通过调用使 UIScrollView 滚动:

- (void)setContentOffsetCGPoint)contentOffset animatedBOOL)animated

关于objective-c - ViewController 只调用一次 touchesMoved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427733/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4