如何在zoomable scrollview中从远程json数据中获取可点击的网格对象?

时间:2016-10-04 12:45:50

标签: ios swift swift2 swift3 cgrect

我想在远程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某事

谢谢!

1 个答案:

答案 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

如果有帮助,请告诉我。