根据他们的CGPoint重新订购UIView的集合

时间:2010-04-05 15:36:50

标签: iphone objective-c uiview nsmutablearray

我有一个NSMutableArray,它包含一组UIViewControllers

在其他属性和方法中,每个viewControllers的实例都放在父视图中

用户将在需要时单独放置这些对象。

所以基本上我使用 - (void)addSubview :( UIView *)视图将新视图添加到父视图控制器。

因为UI是等距的,所以事情变得更复杂了

我要做的是根据坐标位置对视图进行重新排序,因此父UIView框架上方的项目索引较低,而父视图框架中的视图较低。位于视图左侧的项目位于右侧

的索引处

我认为解决方案可能与重新排序NSMutableArray有关,但我如何比较CGpoints?我需要分别比较x和y吗?

3 个答案:

答案 0 :(得分:0)

那么用户可以在父视图中拖动视图吗?当一个视图改变位置时,你想在子视图中改变它的位置索引,以便绘制顺序是正确的吗?

您可以使用-(void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2执行此操作。仅仅在你的数组中重新排序它们是不够的,因为父UIView有自己的数组来跟踪视图。您应该创建一个重新排序方法,在该方法中,您可以在自己的数组和父视图中切换视图。

有用于检查点的相等性,在rects中包含点,rects的交集等的函数,但是这里听起来好像你想获得origin.y点并使用它来比较哪些视图进一步“返回” “或者前面......

顺便说一句,您可能希望使用CALayers,它也支持设置z位置。

答案 1 :(得分:0)

这可能是一个简单的答案,但也许这就是你要找的东西。

假设您可以访问他们的CGpoints,您可以写一个......

- (NSComparisonResult)比较:(NSObject *)传入;

查看传入和“self”的CGpoints的每个委托中的

方法,并返回NSComparisonResult。很酷的事情就是你可以跑...

[myMutableArray sortUsingSelector:@ selector(compare :));

任何时候任何改变。您只需设置compare:方法即可返回正确的NSComparisonResult。

答案 2 :(得分:0)

我设法解决了这个问题,我做了一些关于键值编码的阅读

我创建了一个名为itemY的属性来存储view.frame.origin.y值。

我创建了一个方法来重新为itemY添加当前的view.frame.origin.y值。

现在,存储ViewControllers数组的ViewController使用带有属性itemY的实例NSSortDescriptor。

使用NSSortDescriptor

创建新的NSArray

现在我遍历新的NSArray并执行我的逻辑