我应该如何在iPad上实现自定义网格?

问题描述:

我正在设计一个iPad应用程序,它将具有一个自定义网格。网格将显示包含单个字符的不同颜色的简单几何形状。这些将根据用户操作进行频繁更新。我应该如何在iPad上实现自定义网格?

网格在两个方向上都会大于屏幕尺寸,因此需要滚动/平移。

我还需要将顶部行和第一列“冻结” - 所以顶部行保留在顶部,但其中的内容与网格的其余部分水平滚动,并且第一列保留在左侧,但内容与网格的其余部分一起卷动。

第一列的内容可能很宽,所以我需要允许用户调整它的大小。

我正在努力设计这个最好的方法。我在想,当我手动管理所有绘图和交互时,将它作为单个自定义视图可能是最简单的。但我不禁感到,我错过了一些更简单的方法。也许甚至有一个合适的第三方组件,这将是一个更好的起点。

设计此应用程序组件的最佳方式是什么?

我会有3个UIScrollViews,您可以适当地设置框架,以便它们使第一列和第一行具有您希望的大小 - 主网格内容可以是右下方的UIScrollView。

控制器类可以是所有视图的UIScrollViewDelegate。将第一列UIScrolView的内容大小设置为与其帧的宽度相同的宽度,但高度正确的内容大小,第一行UIScrollView应该具有与其帧相同的高度,但是内容的正确宽度,左下方的UIScrollView将其内容大小设置为网格内容的大小。

- (void) scrollViewDidScroll:(UIScrollView*)scrollView的方法滚动它们中的任何一个,以便检查哪一个已滚动,滚动适当TEH另外两个时被调用。

//Declared and positioned somewhere earlier, like in the .h 
UIScrollView* firstCol; 
UIScrollView* firstRow; 
UIScrollView* mainGrid; 

- (void) scrollViewDidScroll:(UIScrollView*)scrollView { 
    if (scrollView == firstCol) { 
     CGPoint offset = mainGrid.contentOffset; 
     offset.y = firstCol.contentOffset.y 
     [mainGrid setContentOffset:offset]; 
    } 
    else if (scrollView == firstRow) { 
     CGPoint offset = mainGrid.contentOffset; 
     offset.x = firstRow.contentOffset.x 
     [mainGrid setContentOffset:offset]; 
    } 
    else if (scrollView == mainGrid) { 
     CGPoint offset = firstRow.contentOffset; 
     offset.x = mainGrid.contentOffset.x; 
     [firstRow setContentOffset:offset]; 
     offset = firstCol.contentOffset; 
     offset.y = mainGrid.contentOffset.y; 
     [firstCol setContentOffset:offset]; 
    } 
} 

UICollectionView做了很好的工作吧。但是如果你需要一个数据网格,再看看this one。这是在阿尔法阶段,但是我会说在一两个月内它会相当强大。欢迎任何建议,当然它是免费的。