iOS:根据 UIButton 相对于其兄弟姐妹的位置对 UIButton 数组进行排序?

iOS: Sorting an array of UIButtons based on their position in relation to their siblings?

我有一个 NSMutableArray,名为 self.tappableButtons,共 UIButtons 个,它们共享相同的父视图。有时它们会重叠,我很乐意根据它们彼此相关的顺序对我的数组进行排序(从最顶层的按钮开始到层次结构中最底部的按钮)。实现此目标的最简单方法是什么?

我基本上是在使用快速枚举来检查我的自定义平移手势识别器中的当前触摸是否落在按钮的范围内。问题是如果两个按钮重叠 returns 枚举时我的数组中第一个出现的按钮,而不是重叠中最上面的按钮。

//Search through all our possible buttons
for (UIButton *button in self.tappableButtons) {
     //Check if our tap falls within a button's view
        if (CGRectContainsPoint(button.bounds, tapLocation)) {
            return button;
        }    
}

最简单的方法(无需了解更多代码)可能是使用 subviews 命令来确定触摸到的最上面的按钮。

UIView* buttonParentView = ....
NSEnumerator* topToBottom = [buttonParentView.subviews reverseObjectEnumerator];

for (id theView in topToBottom) {
     if (![self.tappableButtons containsObject: theView]) {
         continue;
     }

     UIButton* button = (UIButton*)theView;
     //Check if our tap falls within a button's view
     if (CGRectContainsPoint(button.bounds, tapLocation)) {
         return button;
     }    
}

如果这个函数执行了很多并且你的 self.tappableButtons 保持相对稳定,或者你的父视图有很多不在 self.tappableButtons 中的子视图,那么简单地使用你的函数可能会更好但首先根据它们在父子视图中出现的位置对可点击按钮进行排序。