从UIScrollView中删除子视图UIImageview

时间:2010-01-23 15:38:44

标签: iphone sdk ipod

您好我有一个uiscrollview,我在uiscrollview中有一个uiimageview对象。 我启动了应用程序。然后我滚动到滚动视图右侧,滚动视图更改但我无法看到我添加的下一个uiimageview对象 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView。在我添加下一个对象之前我删除了以前的...出了什么问题?

删除我使用的对象

UIImageView *l;

    for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
        if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){

            //This code never gets hit
            l=[[scroll subviews] objectAtIndex:0];
            [l removeFromSuperview];
            l=nil;

        }
    }

然后我添加下一个对象

[scroll addSubview:imageView];

我删除了上一个对象,因为当我在scrollview上添加110个图像时我的应用程序崩溃所以我必须管理内存。这就是我删除前一个对象的原因。

任何人都可以帮忙!

2 个答案:

答案 0 :(得分:2)

我看到的第一个问题是你在修改数组的同时循环遍历数组。您的ko循环索引也不会在任何地方使用。你总是抓住第0项。

怎么样:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
         [view removeFromSuperview];
    }
}
[subviews release];

这不正是你想要做的吗?

答案 1 :(得分:2)

有一些建议让你走上正轨:

  1. 如果您认为内存存在问题,请对问题进行分区。例如,一次添加/删除10个图像。

  2. 在尝试避免维护自己的循环问题时,UIView的标记属性是您最好的朋友。您可以在需要时为UIImageViews设置特定标记,然后使用[UIView viewWithTag:tag]搜索标记;它以递归方式工作。

  3. st3fan提出了一个关于并发修改的非常好的观点。一般来说,避免它的一个好方法是添加到“删除数组”然后删除ObjectsInArray。