我想知道是否还有其他问题,例如tag
?
我已经在我的图片上使用了标签,但我必须使用多个标签来创建我的代码,我还没有找到办法...因此我想知道如果还有另一种与tag
类似的东西?另一种标记"标记"一个图像?
(image.tag = 1
)--->标签的示例。
答案 0 :(得分:1)
您可以为每个图像值添加一个键并将其存储在字典中。
// First make an array of images
var ArrayOfImages = [UIImage]
// code to populate array
// Use ArrayOfImages.append(image), and add tag to each image.
// Then, Make a dictionary like so.
var dict : [Int : UIImage] = [:]
for index in 0...(ArrayOfImages.count - 1) {
dict[intvalueofChoice] = ArrayOfImages[index]
}
基本上每个图像对应一个标记,也是一个与整数类型的键对应的值。
要访问您选择的特定标记的图像,
var image = dict[specificTag] // gives you your result..
// or
var image = yoursuperView.viewWithTag(specificTag)
我的问题是否正确?
我认为使用这种方法,您可以使用多个词典来存储具有不同整数键值的相同图像,或者不同的"标记"
答案 1 :(得分:1)
您可以构建一个Singleton类来跟踪UIImage
和标记之间的关系。
class TaggedImages {
static let sharedInstance = TaggedImages()
private var dict = [Int:Set<UIImage>]()
private init() { }
func add(tag:Int, to image:UIImage) {
var set = dict[tag] ?? Set<UIImage>()
set.insert(image)
dict[tag] = set
}
func remove(tag:Int, to image:UIImage) {
var set = dict[tag] ?? Set<UIImage>()
set.remove(image)
dict[tag] = set
}
func images(with tag: Int) -> [UIImage] {
guard let set = dict[tag] else { return [] }
return Array(set)
}
func tags(by image: UIImage) -> [Int] {
return dict.filter { $0.1.contains(image) }.map { $0.0 }
}
}
正如您所看到的,此类包含一个字典,其中键为Int
(标记),值为Set
UIImage(s)
。
现在我们可以
接下来让我们为UIImage
extension UIImage {
func add(tag:Int) {
TaggedImages.sharedInstance.add(tag, to: self)
}
func remove(tag:Int) {
TaggedImages.sharedInstance.remove(tag, to: self)
}
var tags: [Int] {
return TaggedImages.sharedInstance.tags(by: self)
}
func has(tag tag:Int) -> Bool {
return self.tags.contains(tag)
}
}
上一个扩展中定义的所有方法都使用TaggedImages
共享实例:
let sky = UIImage()
sky.add(tag: 1)
sky.add(tag: 2)
sky.add(tag: 3)
sky.tags // [2, 3, 1]
sky.has(tag: 1) // true
sky.has(tag: 2) // true
sky.has(tag: 100) // false
sky.remove(tag:1)
sky.has(tag: 1) // false
sky.remove(tag:1)
sky.has(tag: 1) // false
sky.tags // [2,3]