2012-04-09 9 views
0

私は25個のUIControlsと10個のUIImageViewを持っています。UIImageViewフォームを最初にタップしたUIControlを第2のタップUIControlにタップ

enter image description here

今の画像がUIImageVIewsであり、グリッドはUIコントロールされている:それはこのようになります。私が望むのは、ユーザーが画像をタップしてグリッド(空白のグリッドのいずれか)をタップすると、UIImageViewは現在のsuperViewから削除され、タップされた空のグリッドのサブビューとして追加されます。ユーザがB2グリッドで最初にしA1グリッドにタップすると、例えば、二つの動作は、A1グリッドから

  1. UIImageViewは
  2. UIImageViewはB2グリッドに追加され、除去され、発生

これにより、ユーザはA1グリッドで画像をタップし、次にB2グリッドにタップすると、出力ウィンドウは次のようになり意味:

enter image description here

EDITは

だから、一度に私は2つのUIコントロールのためのトラックを持っている必要があります:
1.which 1が最初に押され、そして
2.which 1は、第二押圧されます。
そして、最初のUIControlからUIImageViewを削除し、それを2番目のUIControlに追加します。私は、単一のUicontrolを追跡し、それらのうちの2つを追跡する必要があることができます。これにより

//....  
A1.tag = 1; 
//... 
-(void)a1ViewTapped:(id)sender 
{ 
    int i = A1.tag; 
    [self switch:i]; 
} 
//... 
-(void)switch:(int)_tag 
{ 
    //.... 
    UIView *view = (UIView*)[self.view viewWithTag:_tag]; 

    [view removeFromSuperview]; 
    //... 
} 

、などのUIコントロールにタグを与えて試してみました。 これをどのように達成できますか?

答えて

3

UIControlUIViewから継承されているため、UIControlにサブビューを追加するには、addSubview:を呼び出してください。

あなたはUIImageView

編集にremoveFromSuperviewを呼び出すことによって、あなたのUIImageView前のコントロールから削除することができます。

非常に単純な実装が選択UIControlへの参照を保持するプロパティを作成することです。プロパティがnilの場合、選択モードになります。コントロールの内部をタッチすると、コントロールへの参照がプロパティに追加されます。プロパティがnilでない場合は、イメージを配置するグリッドコントロールを探しています。

また、UIControlがUIImageViewインスタンスの1つにサブビューとして存在するかどうかを追跡する方法が必要です。これを行うにはいくつかの方法があります。 1つの方法は、それに含まれるUIImageを指すプロパティを追加するためにUIControlをサブクラス化することです。別の方法として、UIControlのサブビューを調べて問題の画像の1つが含まれているかどうかを調べることがあります。別の方法は、画像の位置を追跡するためのデータ構造を作成することです。どのように行うかはあなた次第であり、最良の方法は実装の詳細に依存します。

談話のためだけに、imageMapと呼ばれるNSMutableDictionaryを設定し、UIControlのタグをキーとして使用し、画像への参照を値として設定するとします。

-(void)selectGridControl:(UIView*)view 
{ 
    if (selectedControl == nil) // In this case nothing is selected 
    { 
     selectedControl = view; 
    } 
    else // In this case we are moving the image to the new view 
    { 
     UIImageView *selectedImage = [imageMap objectForKey:selectedControl.tag]; 

     if (selectedImage != nil) 
     { 
      [selectedImage removeFromSuperview]; 
      [view addSubview:selectedImage]; 
      [imageMap removeObjectForKey:selectedControl.tag]; 
      [imageMap addObject:selectedImage forKey:view.tag]; 
      selectedControl = nil; 
     } 
    } 

imageMapを初期化し、先のコントロールが既に読者の演習として残しているイメージを持っている場合を扱う:ように、あなたは何かを行うことができます。

+0

返信いただきありがとうございます。私はaddSubViewとremoveFromSuperViewの両方を呼び出すことができます。しかし、私はどのように私は方法を通じて行動を達成することができます見つけることができていない、もう一度質問をお読みください。ユーザが画像をタップしてから空のグリッドをタップすると、第1のグリッドの画像形態が除去され、第2のグリッド画像に同じ画像が追加される。私は、タップされたグリッドと、グリッドを含むグリッドと、それを置き換えるタイミングを追跡する必要があります。 – Shabib

+0

正確にどの部分に問題がありますか?おそらく、あなたはあなたの質問にもっと具体的になり、すでに試したことを投稿して、うまくいかないことを説明するかもしれません。 –

+0

どのように私はUIControlsを追跡することができますか、私はどのようにUIControlが最初にタップされ、どのコントロールがUIImageViewを交換する方法、次にタップされるのかを確認することができます。私は、コントロールをタグ(例えばA1.tag = 1)を与えようとしているので、単一のUIControlを追跡することができましたが、この場合、一度に2つのコントロールをトラッキングする必要があります。秒をタップします。これで私を助けてくれますか? – Shabib

関連する問題