2011-05-31 64 views
0

我有一个带有几个UIImages(子视图)的UIView,用于保存用户从照片库中选择的照片。我想支持用户可以重新排列子视图顺序的功能。用户得到一个modalviewcontroller,在那里他可以按顺序拖放视图并将其放置到位。但是当我想更新子视图的顺序时,什么都不会发生。唯一成功的是使用bringSubviewToFront将我拖动到顶端的对象放置到顶端,但这不是我想要的。objective-c管理子视图的顺序

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

在此先感谢! Michael

+0

你现在怎么实现'exchangeSubview ...'方法? – 2011-05-31 21:04:05

+3

我认为看到一些代码在这里会有所帮助。你如何将子视图放在他们的父视图中开始?也就是说,UIImageView的布局是否在UIView中都是可见的?它们以某种方式重叠?你想要呈现一些像一堆照片? – 2011-05-31 21:11:19

+0

我不知道是否echangeSubviewAtIndex:...显式调用[view setNeedsDisplay]或[view setNeedsLayout]。你可以试试,也要确保你的索引是有效的,并且在(0- [[view subviews] count] -1)的范围内。 – 2011-05-31 21:14:01

回答

0

您提到“将图像放在新位置”,这意味着您正在将UIImageView移动到(X,Y)坐标系中。子视图数组中的索引仅在Z方向上排列视图(如果它们重叠,则影响哪个视图处于“顶部”)。交换视图顺序将不是交换(X,Y)坐标。

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的空气质量准则的一个实例ridView库,它像一个tableViewController,但有一些扩展。它像一个跳板应用程序。当用户“滴”的图像到一个新的地方,我叫

[spinnerView exchangeSubviewAtIndex:_dragOriginIndex withSubviewAtIndex:index]; 

,表中的阵列已经更新刚过:

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

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