• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c - ViewController 只调用一次 touchesMoved

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:19:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap