objective-c - ViewController 只调用一次 touchesMoved
<p><p>我已经搜索过一个问题,但找不到明确的答案。这是我的布局:</p>
<pre><code>UIView - ViewController
|_UIScrollView - added programatically
| |_UIView to hold a backgound/perimeter- added programmatically
|_UIView 1 - added programmatically
|_UIView 2 - added programmatically
and so on
</code></pre>
<p>我的问题是,当我移动说 UIView 2 on touch 时,为什么 ViewController 只调用一次“touchesMoved”?</p>
<p>现在 UIView 有它自己的 touchesMoved 方法,但我需要调用 Controller 的 touchesMoved,因为我需要它与 ScrollView 对话以更新其位置。比如当那个 UIView 2 靠近拐角的时候,让 ScrollView 稍微移动一下就可以完全显示 UIView 2。</p>
<p>如果没有办法解决这个问题,有没有办法从 UIView 2 更新 ScrollView 以在靠近角落时滚动?</p>
<p>编辑:</p>
<p>我想我可能已经找到了解决办法。不确定这是否会被 Apple 接受,但是:</p>
<p>我刚刚调用了一个实例变量,即 = self.superview,然后我可以在 UIView 的 touchesMoved 中与我的 ScrollView 对话</p>
<p>因为我可以调用方法 所以当 subview(UIView2) 靠近 UIWindow 的边缘时,我的 ScrollView 会得到更新。 </p>
<p>感谢您的建议。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您描述的行为是 <code>UIScrollView</code> 劫持触摸移动事件的结果。换句话说,一旦 <code>UIScrollView</code> 检测到触摸移动事件落在其框架内,它就会控制它。我在尝试创建一个特殊的滑动处理程序时遇到了同样的行为,每次 <code>UIScrollView</code> 也对滑动感兴趣时它都会失败。</p>
<p>在我的例子中,我通过拦截 <code>sendEvent:</code> 中的事件解决了这个问题,该事件在我的自定义 <code>UIWindow</code> 中被覆盖,但我不知道你是否想这样做相同的。无论如何,这对我有用:</p>
<pre><code>- (void)sendEvent:(UIEvent*)event {
NSSet* allTouches = ;
UITouch* touch = ;
UIView* touchView = ;
//-- 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
;
}
</code></pre>
<p>您可能会研究的另一种方法是将 <em>手势识别器</em> 附加到您的 View- 它们具有相当高的优先级,因此 UIScrollView 可能不会干扰它们,它可能对您更有效.</p>
<blockquote>
<p>If there is no way around this is there a way to update ScrollView from UIView 2 to scroll when its near a corner?</p>
</blockquote>
<p>您是否尝试通过调用使 <code>UIScrollView</code> 滚动:</p>
<pre><code>- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
</code></pre></p>
<p style="font-size: 20px;">关于objective-c - ViewController 只调用一次 touchesMoved,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12427733/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12427733/
</a>
</p>
页:
[1]