跟踪屏幕上的对象

时间:2013-05-16 15:27:44

标签: ios

即使我在Objective C中编写,我的大多数代码仍然是以程序风格编写的。但是,现在我想做一些不起作用的方法。所以我需要一些关于如何同时处理屏幕上不确定数量的对象的建议。我确信这个问题已经解决了,我只是无法弄清楚如何。

我有一堆游戏,我在屏幕上放了两四张图片然后用户与图片进行交互。当他们完成一个页面时,他们会滑动到下一个页面,然后我使用转换将图片从屏幕上滑下来。我可以控制图片的移动,因为在创建图片时我将它们命名为self.picture_1self.picture_2。移动方法知道它们,即使该方法没有创建它们。

现在假设我想在屏幕上显示不确定数量的图片。我不能称他们为self.picture_1。通过self.picture_n因为ObjectiveC不会让你动态创建变量名。但是我仍然需要在没有创建它们的方法中移动它们。

我可以使用两种技术来实现它们,这两种技术看起来都不理想。首先,我查看屏幕上的所有对象,然后对我想要定位的对象执行某些操作。注意:图片在按钮中。

for ( id subview in self.parentView.subviews ) {
        if ( [subview isKindOfClass:[UIButton class]] ) {
            UIButton *pictureButton = subview;
            for (NSUInteger i=0; i<self.totalItems; i++) {
                NSUInteger row = (i % 2) + 1;
                NSUInteger column = (i/2) + 1;
                NSString *pictureTitle = [NSString stringWithFormat:@"pictureR%iC%i", row, column];
                if ( [pictureButton.titleLabel.text isEqualToString:pictureTitle] ) [pictureButton removeFromSuperview];
            }
        }
}

这适用于从视图中删除它们,但当我尝试将图片从屏幕上滑落时会变得很麻烦。

第二种方法是创建一个在创建图片对象时保存图片对象的数组。我一直在玩这样的东西。

self.gridImages = [NSMutableArray arrayWithCapacity:4];
        for (NSUInteger i = 0; i < itemsOnScreen; i++) {
            Word *word = [wordListArray objectAtIndex:i];
            self.gridImages[i] = word.image;
}

然后用我在数组中循环的图片做事。

for (NSUInteger i = 0; i < itemsOnScreen; i++) {
    Picture *picture = self.gridImages[i];
    // do something with picture
}

这两种方法都没有“正确”,所以我想知道是否有一种首选的方法来操纵屏幕上不确定数量的对象?

1 个答案:

答案 0 :(得分:0)

@Hot Licks,这很有效,所以我给你答案。

我让它适用于checkBoxes。它们由主视图控制器创建,并传入标签。我使用的标签从1000开始用于复选框,2000用于图片等。就在我将checkBox放在屏幕上之前,我将它分配给标签。

[self.checkBox setTag:checkBoxTag];

您还可以使用:self.checkbox.tag = checkBoxTag;

当需要删除复选框时,我会遍历从1000开始的所有标记,直到屏幕上的项目总数。我有警告转到11,所以我需要将计数器转换为NSInteger。

- (void)removeCheckboxes {
    for (NSUInteger i = 0; i < self.totalItems; i++) {
        NSInteger tagNumber = 1000 + (NSInteger)i;
        [ [self.parentView viewWithTag:tagNumber] removeFromSuperview];
    }   

}