韩琳 發表於 2022-4-9 21:14:00

React Native Touchable组件onPress方法在使用PanResponder时失效,iphone6,iphone 6S

<svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                  </svg>
                  <h3>收到测试反馈iphone6和iPhone6s上点击列表有时无法跳转到详情页面,调试时候发现点击touchable组件时,有时会执行onPress方法,有时会执行PanResponder的方法</h3>
<h3>手指点击屏幕面积比较小时执行onPress,否则会执行PanResponder方法</h3>
<h3>可能是因为点击屏幕面积比较大时,系统认为进行了移动操作,所以进入了PanResponder方法,解决方法就是在响应PanResponder的时候判断,只有移动超过多少像素才去响应Move</h3>
<pre><code class="prism language-javascript">        onMoveShouldSetPanResponder<span class="token punctuation">:</span> <span class="token punctuation">(</span>evt<span class="token punctuation">,</span> gestureState<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
                <span class="token keyword">let</span> <span class="token punctuation">{</span>dx<span class="token punctuation">,</span>dy<span class="token punctuation">}</span> <span class="token operator">=</span> gestureState<span class="token punctuation">;</span>
                <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>dx<span class="token punctuation">)</span> <span class="token operator">&gt;</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>dy<span class="token punctuation">)</span> <span class="token operator">&gt;</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                        <span class="token keyword">return</span> <span class="token boolean">true</span>
                <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                        <span class="token keyword">return</span> <span class="token boolean">false</span>
                <span class="token punctuation">}</span>
      <span class="token comment">//return(Math.abs(dx) &gt; 5) || (Math.abs(dy) &gt; 5); 不使用这种写法,某些三星机器异常</span>
    <span class="token punctuation">}</span>
</code></pre><br><br>
来源:https://www.cnblogs.com/chaosfe/p/16123577.html
頁: [1]
查看完整版本: React Native Touchable组件onPress方法在使用PanResponder时失效,iphone6,iphone 6S