【问题标题】:moving UIImageView form first tapped UIControl to second tapped UIControl将 UIImageView 表单首先点击的 UIControl 移动到第二次点击的 UIControl
【发布时间】:2012-04-09 14:12:29
【问题描述】:

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

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

  1. A1 网格中的 UIImageView 已移除,
  2. UIImageView 已添加到 B2 网格中

这意味着当用户在 A1 网格处点击图像,然后在 B2 网格处点击时,输出窗口如下所示:

编辑

所以,一次我需要跟踪两个 UIControl:
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,但需要跟踪其中两个。 我怎样才能做到这一点,有人可以帮忙吗?

【问题讨论】:

    标签: iphone cocoa-touch ios4 logic


    【解决方案1】:

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

    您可以通过在 UIImageView 上调用 removeFromSuperview 从先前的控件中删除您的 UIImageView

    编辑:

    一个非常简单的实现是创建一个包含对选定UIControl 的引用的属性。当属性为 nil 时,您处于选择模式。在控件内部进行修饰会将对该控件的引用放入属性中。当属性不为零时,您正在寻找一个网格控件来放置图像。

    您还需要一种方法来跟踪您的 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和处理目标控件已有图像的情况留给读者练习。

    【讨论】:

    • 感谢您的回复,我知道我可以同时调用 addSubView 和 removeFromSuperView。但我无法找出如何通过方法完成操作,请再次阅读问题。当用户点击一个图像,然后点击一个空网格时,第一个网格中的图像被删除,并且相同的图像被添加到第二个网格中。我需要跟踪被点击的网格以及哪个网格包含图像以及何时替换它。
    • 那么您到底遇到了什么问题?也许您可以更具体地提出您的问题,并发布您已经尝试过的内容并解释什么不起作用。
    • 我如何跟踪 UIControls,我的意思是我如何跟踪首先点击哪个 UIControl,然后点击哪个控件,然后如何交换 UIImageView?我已经尝试给控件一个标签(例如 A1.tag = 1),因此已经完成了跟踪单个 UIControl,但在这种情况下,我需要一次跟踪两个控件,一个是先点击,一个是轻拍第二。你能帮我解决这个问题吗?
    • 我添加了一个简短描述,说明您可以处理它的方式。抱歉,我没有时间了解更详细的内容。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2014-09-06
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多