2

カスタム セルを含む UITableView があります。セルに触れると、UIImageView のサブビューが追加されます。

ユーザーが指を離した後に画像を消したいのですが、UIImageVIew サブビューに touchesEnded メソッドがありますが、呼び出されることはありません。

指を離してからもう一度押し下げて離した場合にのみ呼び出されます。

元のタッチで呼び出されるメソッドを取得するにはどうすればよいですか。

画像を表示するときにSnapchatが行うことについて、私はちょっと考えています。

4

3 に答える 3

3

サブビューがイベントを取得しない理由は、touchesEndedイベントを受信して​​いないためtouchesBeganです。これら 2 つはペアになります。どちらのビューがタッチを開始しても、タッチが終了します。その時そこになかったので、あなたUIImageViewは手に入れることができませんでしtouchesEndedた。touchesEnded両方のイベントにあるため、押して離すと2回目になります。

この問題を回避するには、いくつかの方法があります。

  • 追加を処理するのと同じ場所でビューの削除を処理しますUIImageView- サブビューを追加するときは、__weakそれへの参照を別の変数に保存します。を追加したビューがイベントを取得したら、UIImageViewそのtouchesEnded変数に移動し、サブビューを削除します。
  • サブビューUIImageViewを追加したり削除したりするのではなく、完全に透明にしてからタッチすると不透明にし、リリース時に再び透明にします
  • 一時的なものをまったく追加しないでください。代わりUIImageViewに使用してCALayerください。画像を短時間ホストするためだけに画像ビューを追加しているように見えます。もっと軽い方法でそれを行う簡単な方法があります - を使用しCALayerます。このアプローチは、レイヤーがタッチ イベントの処理に参加しないため、実装が簡単です。
于 2013-08-13T20:21:50.533 に答える
0

おそらく touchBegan メソッドはセル上にあります。それがサブビューが追加されるときです。

タッチはすでにセルによって記録されています。Cell のtouchesEndedは、指を離したときに呼び出されるものです。そのため、画面からサブビューを削除する必要があります。サブビューへの参照をセル クラスに保存し、それが と等しくない場合はnil、touchesEnded で削除します。そのような単純な。

サブビューが存在する前に、タッチがCell で開始されました。同じタッチがcell で終了します。進行中のタッチを別のビューに転送することはできません。

于 2013-08-13T20:20:27.710 に答える
0

そのビューに触れて指を上げるときは、指をドラッグしてはいけません。そうした場合、touchesCancelled: メソッドが呼び出されます。ですから、あなたの見解は小さすぎて触れられないと思います。はいの場合は、大きなビューを作成して、もう一度試してください。それはあなたのために働くでしょう。

于 2013-08-13T20:20:42.097 に答える