0

UIView 内に 2 つのドラッグ可能な UIImageView があります。1 つの UIImageView を別の UIImageView にドラッグすると、これら 2 つの UIImageView へのタッチ イベントを無効にして、タッチ イベントに応答する別の UIImageView を作成したいと思います。setUserInteractionEnabled: を使用してみましたが、実際には何もしていません。これが非常に簡単である場合は許してください。ただし、私はプログラミングが初めてです。これが私がこれまでに持っているものです。私のコードに関するフィードバックと建設的な批判をお願いします。

-(void)swapImageViews
{
  if ((self.imgView1.center.x == self.imgView2.center.x) &&
      (self.imgView1.center.y == self.imgView2.center.y)) {

      [self addSubview:self.imgView3];
      self.imgView3.center = CGPointMake(self.imgView1.center.x, self.imgView1.center.y);
      [self.imgView1 removeFromSuperView];
      [self.imgView2 removeFromSuperView];
      [self.imgView1 setUserInteractionEnabled:NO];
      [self.imgView2 setUserInteractionEnabled:NO];
    }
}

繰り返しになりますが、目標は 2 つの画像ビューを、ドラッグできる新しいビューと交換することです。

私が直面している問題は、タッチ イベントがまだ最初の 2 つの画像ビューを 3 番目のビューの後ろに移動していることです。

4

2 に答える 2

0

3 番目の画像が表示されたと言いますが、他の 2 つはまだ表示されており、タッチ イベントを受け取ります。これには 2 つのシナリオがあります。

  1. 3 番目の画像ビューを別の場所に既に追加しており、メソッドが呼び出されないか、条件が満たされていません。
  2. self.imgView1self.imgView2ビュー スタック内の実際のオブジェクトには設定されません。彼らはおそらくゼロです。NSLog(@"%@ %@", self.imgView1, self.imgView2);そのメソッド内、条件の前、または内でviewWillAppearデバッグできますviewDidLoad

私の意見を支持する理由:

  1. そのメソッドでは、removeFromSuperview無効にする 2 つのイメージ ビューを呼び出しますが、それらはまだ表示されており、タッチ イベントを受け取っています。つまり、このメソッドは実行されません。つまりnil、目に見えるものとは異なる、または他のオブジェクトです。
  2. メソッドの開始時の条件は少し厳しいです。簡単に会うのは難しいです。それでも、3 番目のイメージ ビューがビューに追加されると、メソッドが実行されます。これは、オブジェクトが nil の場合に発生する可能性があるため、メソッドによって返される値はデフォルト値です。

このリンク「10番目のアイテム」これもチェックしてください。

于 2013-05-31T01:59:20.377 に答える