-1

私は午前中ずっと試しましたが、それは不可能だと思い始めました。

画面にタッチすると、応答チェーンに入り、何かをした可能性があります。次に、touchesMoved:メソッド(タッチに関連付けられたuiResponderの)と呼ばれる画面上でそれを移動し、おそらく他のことを行いました。この時点で、とにかく、タッチは画面内で移動し続け、他のuiViewに入ると、uiTouchが再初期化されます(つまり、最初のuiViewでtouchEndedを呼び出し、次に新しいuiViewでtouchesBeganを呼び出します。その後、移動を続ける場合はtouchesMovedを呼び出します)。

私はresignFirstResponderを再署名し、手動でメソッドを呼び出そうとしましたが、できません。これには本当に簡単な答えがあるはずだと私は考え続けています。何かのようなもの

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.superview];
if (!CGRectContainsPoint(self.frame, location)) {
    [touch restart];
}

また

[[touch phase] restart];

(しかし、ドキュメントには何でもあります):

4

1 に答える 1

0

私の推奨事項は、タッチを受け取るために移行するすべてのビューのスーパービューを取得してから、touchesMoved / Begin / Endedメソッド内のサブビューでヒットテストを実行することです(おそらくCGRectContainsPoint(...)を介して)。それに応じてタッチを渡します(サブビューで対応するtouchesBegan / Moved / Endedメソッドを呼び出します)。

于 2012-06-06T18:58:01.303 に答える