我应该如何在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];
}
}