2012-04-09 172 views
0

我有25个UIControls和10个UIImageView。它看起来像这样:移动UIImageView窗体第一次点击UIControl到第二次点击UIControl

enter image description here

现在的图像是的UIImageViews和格子是UIControls。我想要的是,当用户点击一个图像,然后点击任何网格(当然是任何空白网格)时,UIImageView会从当前的superView中删除,并添加为空白网格的子视图。例如,如果用户在A1格第一,然后轻敲在B2格,发生两个动作,从A1网格

  1. 的UIImageView被去除,
  2. 的UIImageView被添加到B2网格

这意味着当用户轻敲在A1处网格图像,然后在B2格子抽头,输出窗口看起来像这样:

enter image description here

编辑

所以,每次我需要跟踪两个UIControls:
1.which一个第一次按下,并
2.which一个被按下第二。
然后从第一个UIControl中删除UIImageView并将其添加到第二个UIControl中。我试图给UIControls标签一样,

//....  
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]; 
    //... 
} 

通过这个我可以跟踪一个UIControl,但需要跟踪他们两个。 我该如何做到这一点,任何人都可以帮忙?

回答

3

UIControl继承自UIView,因此您可以通过致电addSubview:将子视图添加到UIControl

您可以通过在UIImageView

编辑致电removeFromSuperviewUIImageView从之前的控制删除:

一个非常简单的实现将创建包含于所选UIControl的参考属性。当该属性为零时,则处于选择模式。触摸控件内部会将控件引用到属性中。当属性不是零时,您正在寻找放置图像的网格控件。

您还需要一种方法来跟踪您的UIControl是否具有UIImageView实例之一作为子视图。有很多方法可以做到这一点。一种方法是子类UIControl添加一个属性,它指向它包含的UIImage。另一种方法可能是简单地检查UIControl的子视图,看它是否包含有问题的图像。另一种方法是创建一些数据结构来跟踪图像的位置。你怎么做取决于你,最好的方法取决于你实现的细节。

为了讨论的方便,我们假设您设置了一个名为imageMapNSMutableDictionary,它使用您的UIControls的标签作为关键字并将图像的引用设置为值。然后,你可以这样做:

-(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。但我无法了解如何通过方法完成该操作,请再次阅读该问题。当用户点击图像然后点击空网格时,第一个网格的图像将被移除,同样的图像将被添加到第二个网格中。我需要跟踪网格点击和哪个网格包含图像以及何时替换它。 – Shabib 2012-04-09 14:50:23

+0

那么究竟是什么部分你有麻烦?也许你可以在你的问题中更具体,也许发布你已经尝试过的东西,并解释什么是不工作的。 – 2012-04-09 15:02:04

+0

我如何跟踪UIControls,我的意思是我如何跟踪哪个UIControl先被点击,哪个控件被点击第二个,然后如何交换UIImageView?我试图给控件一个标签(例如A1.tag = 1),因此已经完成跟踪单个UIControl,但是在这种情况下,我需要跟踪两个控件,一个是先轻触哪一个,另一个是第二。你能帮助我吗? – Shabib 2012-04-09 15:13:32

相关问题