如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?
Posted
技术标签:
【中文标题】如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?【英文标题】:How to draw clickable grid objects inside zoomable scrollview taken datas from remote json data? 【发布时间】:2016-10-04 12:45:49 【问题描述】:我想在下面的可缩放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 = [""]
将显示在我的 zoomable scrollview
里面 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
somethings 吗?
谢谢!
【问题讨论】:
还在寻找解决方案? @cire.boroguies 是的,伙计。 【参考方案1】:您的 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,则为矩形)的位置,请使用循环索引。基地是行,座位是列。方形视图的锚点将是 x:0 用于座位循环中的索引 0 和 y:0 用于 A 基础,将是座位循环的 x:20 * loop index
和基础循环的y: 20 * loop index
。宽度为value * 20
,高度始终为 20。
然后你通过处理触摸事件来管理方形视图本身的点击和颜色状态。
不要忘记将滚动视图的 contentSize 设置为 CGSize(width: base[0].count * 20, height: bases.count * 20
如果有帮助,请告诉我。
【讨论】:
以上是关于如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 xamarin 表单中进行可单击和可缩放的网格 (10000 x 10000)