我想在远程scrollview
数据的可缩放json
数据中绘制可点击的网格对象,我的示例远程json
文件数据位于下方;
Json
数据爆炸意味着;
0 =空对象未在视图中显示对象
1 =显示标题和背景不是空对象的对象
[
{
"Base": "A",
"Seats": "A1*0*,A2*1*,A3*1*,A4*1*,A5*0*,A6*0*"
},
{
"Base": "B",
"Seats": "B1*1*,B2*1*,B3*1*,B4*0*,B5*0*,B6*0*,B7*1*"
},
{
"Base": "C",
"Seats": "C1*0*,C2*0*,C3*0*,C4*0*,C5*0*,C6*0*,C7*1*,C8*1*,C9*1*,C10-C11*1*"
}
]
我也有远程json
解析代码我成功地将json
数组带到我的下面的数组中;
var Base = [""]
var Seats = [""]
将在scrollview
内的 zoomable json
内显示,如下所示;
1 2 3 4 5 6 7 8 9 10 11
A A2 A3 A4
B B1 B2 B3 B7
C C7 C8 C9 C10-C11
非 A2,A3,A4 这样的空对象必须是正方形width
:20 height
:20,绿色背景可点击对象。当我点击我的视图时,我可以将背景颜色更改为红色等。
此外,C10-C11 必须加倍width
x 2,以便座位成双座位。您可以看到即将发生json
值。
我该怎么做?我尝试collectionview
但没有zoom
功能?我想我需要处理 cgrect
某事?
谢谢!
答案 0 :(得分:0)
您的json文件格式是固定的还是可以自定义的?它似乎没有为你期望的准备好。
您不需要拥有A B C部分并在网格项中重复部分名称。与战舰游戏一样,每个单元格的名称由列和行标题表示。所以,如果你可以格式化:
[{ "A":"0","1","1","1","0","0"... },{ "B":"1","1","1","0"...},{"C" : ..."0","1","1","1",**"2"**}]
(注意:这只适用于座位只能水平加倍)
现在您创建两个数组:一个具有基本名称,通过获取字典(来自JSON)键:
let bases = jsonDict.allKeys
另一个包含其中的所有数据:let seats = jsonDict
现在你应该循环两次: 首先在基础数组中,然后在每个基本条目的席位数组中。
每次检查seats[bases[index in base loop]][index in the seat loop]
的值以获取值。如果为0,则继续,如果为1,则创建方形视图并将其添加到滚动视图。如果2具有加倍宽度的方形视图,则相同。
要设置方形视图的位置(如果值为2,则设置矩形),使用循环索引。基座是行,座椅是列。方形视图的锚点对于座位循环中的索引0将是x:0并且对于A基础将是y:0,将是座位循环的x:20 * loop index
和基础循环的y: 20 * loop index
。宽度为value * 20
,高度始终为20。
然后通过处理触摸事件来管理方形视图中的点击和颜色状态。
不要忘记将您的滚动视图的contentSize设置为CGSize(width:base [0] .count * 20,height:bases.count * 20
如果有帮助,请告诉我。