objective-c管理子视图的顺序

时间:2011-05-31 20:51:09

标签: iphone objective-c ios uiview subviews

我有一个带有几个UIImages(子视图)的UIView,用于保存用户从照片库中选择的照片。我想支持一个功能,用户可以重新排列子视图的顺序。用户获得一个modalviewcontroller,他可以按顺序拖放视图并将其放置到位。但是,当我想更新子视图的顺序时,没有任何反应。唯一成功的是使用bringSubviewToFront:将我拖动到顶部的对象放置到顶部,但这不是我想要的。

我想要使用的方法是exchangeSubviewAtIndex:i withSubviewAtIndex:index。但我无法让它发挥作用。你们有什么建议我应该怎么解决这个问题吗?

提前致谢! 迈克尔

2 个答案:

答案 0 :(得分:0)

你提到“在新的地方删除图像”,这意味着你正在(X,Y)坐标系统中移动UIImageView。子视图数组中的索引仅在Z方向上对视图进行排序(如果它们重叠,则影响“在顶部”)。交换视图顺序交换(X,Y)坐标。

答案 1 :(得分:0)

它是一个应用程序,你有一堆图像(重叠),你可以看到一系列的。

我使用ELCImagePicker,相机胶卷的扩展,它允许我们在相机胶卷中选择多个图像。

我在字典中得到返回的图像:

for(NSDictionary *dict in info) {
        UIImageView *thisImageView = [[UIImageView alloc] initWithImage:[dict objectForKey:UIImagePickerControllerOriginalImage]];
        [array insertObject:thisImageView atIndex:[thearray count]];
        [thisImageView release];
}

然后我按下一个视图控制器,向我显示正确的图像 - 它显示我的UIView子类,SpinnerView

在SpinnerView中,我列出了子视图:

spinnerImages = [[NSMutableArray alloc] initWithArray:thearray];
for (UIView *object in spinnerImages) {
    [object setContentMode:UIViewContentModeScaleAspectFit];
    object.frame = self.frame;
    [self addSubview:object];
}

当用户想要管理订单时,他们点击“编辑按钮”并获得一个modalViewController,一个AQGridView库的实例,其工作方式类似于tableViewController,但有一些扩展。它就像一个跳板应用程序。当用户将图像“删除”到新位置时,我会调用

[spinnerView exchangeSubviewAtIndex:_dragOriginIndex withSubviewAtIndex:index];

,就在表更新数组之后:

// update the data store
    id obj = [[images objectAtIndex: _dragOriginIndex] retain];
    [images removeObjectAtIndex: _dragOriginIndex];
    [images insertObject: obj atIndex: index];

希望这有助于解决我的难题,让我摆脱头痛:)