Ios 用标签按颜色匹配两个图像阵列
我有两个UIImageView数组,我用18个块和圆填充它们Ios 用标签按颜色匹配两个图像阵列,ios,swift,swift3,Ios,Swift,Swift3,我有两个UIImageView数组,我用18个块和圆填充它们 var myBlocks = [UIImageView]() var myCircles = [UIImageView]() 因此,当我以一种很好的方式将我的圆圈添加到屏幕上,然后我的块覆盖了它们之后,我调用一个函数来设置圆圈和块的标记以匹配,如果颜色匹配的话。意思是如果块是鲜红色,我想找到鲜红色的圆,并将它们都标记为0,依此类推。我设置标记的下面这一行抛出了错误: 无法使用“UIImageView”类型的索引为“[UIImageV
var myBlocks = [UIImageView]()
var myCircles = [UIImageView]()
因此,当我以一种很好的方式将我的圆圈添加到屏幕上,然后我的块覆盖了它们之后,我调用一个函数来设置圆圈和块的标记以匹配,如果颜色匹配的话。意思是如果块是鲜红色,我想找到鲜红色的圆,并将它们都标记为0,依此类推。我设置标记的下面这一行抛出了错误:
无法使用“UIImageView”类型的索引为“[UIImageView]”类型的值下标
有没有更简单的方法?我之所以不在创建时同时标记这两个圆圈,是因为这些圆圈是使用一个随机排列的数组创建的,因为当游戏加载时,我不希望相同颜色的圆圈和相同的色块彼此重叠 编辑:我把它改为x.tag=y.tag,看起来更好。然而,当我点击一个方块时,我现在正在打印两个
let objectDragging = recognizer.view?.tag
print(objectDragging)
//and
print("the tag of the object your touching is \(myBlocks[objectDragging!])")
我在使用过程中得到的日志是
Optional(13)
the tag of the object your touching is <UIImageView: 0x7f8d4ba103a0;
frame = (263 180; 100 100); opaque = NO; tintColor =
UIExtendedSRGBColorSpace 0.8 0.3 0.3 1; tag = 11; gestureRecognizers = <NSArray: 0x60000005fec0>; layer = <CALayer: 0x600000220580>>
可选(13)
您触摸的对象的标签是
所以一个是说这个区块被标记为13,一个是说11。当我打印myBlocks[count].tag时,13就是它所说的,我只是不知道在myBlocks[objectdraging]语句中11是从哪里来的
编辑2:是否因为(myBlocks[ObjectDraging!])引用了不同的块?此行:
myBlocks[x].tag = y //Error here
y
是myCircles
的元素。它不是标记
将该行更改为:
x.tag = y.tag
你有两个问题。首先,
myBlocks[x]
将引发一个错误,因为您正在通过元素而不是索引进行循环。其次,x.tag=y
引发一个错误,因为属性和您正在尝试分配一个UIImageView
for x in myBlocks {
for y in myCircles {
if x.tintColor == y.tintColor {
x.tag = y.tag //fix here
}
}
}
编辑:或者,如果要循环索引:
for x in 0..<myBlocks.count {
for y in 0..<myCircles.count {
if myBlocks[x].tintColor == myCircles[y].tintColor {
myBlocks[x].tag = myCircles[y].tag
}
}
}
myBlocks[x].tag=y将此行更改为x.tag=y.tag在编辑中,
让ObjectDraging
是与识别器视图的标记相对应的整数(Int)。但是不能保证myBlocks[ObjectDraging]
中的对象具有相同的标记,除非您已按这种方式对其进行排序。只需复制前面的注释即可。@matt您为什么这么认为?我已加载此页面并在xcode中运行示例,然后返回此页面并回答问题!不读评论。好啊我将编辑我的原始帖子,并在添加该帖子后添加我的问题。虽然效果更好。谢谢你。
for x in 0..<myBlocks.count {
for y in 0..<myCircles.count {
if myBlocks[x].tintColor == myCircles[y].tintColor {
myBlocks[x].tag = myCircles[y].tag
}
}
}
for (x, block) in myBlocks.enumerated() {
for (y, circle) in myCircles.enumerated() {
if block.tintColor == circle.tintColor {
myBlocks[x].tag = myCircles[y].tag
}
}
}