移动UIImageView表单首先点击UIControl到第二个点击UIControl

时间:2012-04-09 14:12:29

标签: iphone cocoa-touch ios4 logic

我有25个UIControl和10个UIImageView。它看起来像这样:

enter image description here

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

  1. 删除了A1网格中的UIImageView,
  2. UIImageView已添加到B2网格
  3. 这意味着当用户点击A1网格处的图像然后点击B2网格时,输出窗口如下所示:

    enter image description here

    修改

    因此,我需要跟踪两个UIControls:
    1.先按一个,然后按 2.第二次按下。
    然后从第一个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,但需要跟踪其中两个。 我怎样才能做到这一点,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

UIControl继承自UIView,因此您可以通过调用UIControl向您的addSubview:添加子视图。

您可以通过UIImageView

上的removeFromSuperview来移除上一个控件中的UIImageView

编辑:

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

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

仅仅为了讨论,我们假设你设置一个名为NSMutableDictionary的{​​{1}},它使用你的UIControls的标签作为键,并将图像的引用设置为值。然后你可以做类似的事情:

imageMap

初始化-(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; } } 并处理目标控件已有图像的情况作为读者的练习。