0

我正在尝试为删除滚动视图中的视图设置动画。scrollView 的子视图是从对象数组中填充的。每个对象都有一个表示它的视图。有时我在删除时遇到 indexOutOfBounds 异常。这是我的删除代码:

-(void)deleteView:(UIView *)viewToDelete{
    [self.myObjects removeObjectAtIndex:viewToDelete.tag];
    [UIView animateWithDuration:0.5 animations:^{
        viewToDelete.alpha = 0.0;
        for (NSInteger index = viewToDelete.tag+1; index<self.myViews.count; index++){
            UIView *view = [self.myViews objectAtIndex:index];
            view.center = CGPointMake(view.center.x,view.center.y-viewToDelete.frame.size.height);
        }
    }]; completion:^(BOOL finished) {
        [view removeFromSuperview];
    }];

    [self.myViews removeObjectAtIndex:viewToDelete.tag];
    for (NSInteger index=0; index<self.myVies.count; index++){
        UIView *view = [self.myViews objectAtIndex:index];
        view.tag = index;
    }

}
4

2 回答 2

1

问题出在动画块上

您应该知道动画块正在异步处理,因此您的最后一段代码可能会在动画过程中被调用,并在动画块内的迭代循环中造成混乱。你应该搬家

[self.myViews removeObjectAtIndex:viewToDelete.tag];
for (NSInteger index=0; index<self.myVies.count; index++){
    UIView *view = [self.myViews objectAtIndex:index];
    view.tag = index;
}

到完成块

于 2013-03-06T13:04:42.823 回答
0

此时出现错误[self.myObjects removeObjectAtIndex:viewToDelete.tag];

一旦从数组中删除一个对象,项目总数就会减少。因此,您无法访问该索引处的对象。

您应该真正映射这两个数组 self.myObjects 和 self.myViews。

于 2013-03-06T12:51:48.223 回答