是否有#34;标签"记者?

时间:2016-06-18 14:39:33

标签: ios swift tags

我想知道是否还有其他问题,例如tag

我已经在我的图片上使用了标签,但我必须使用多个标签来创建我的代码,我还没有找到办法...因此我想知道如果还有另一种与tag类似的东西?另一种标记"标记"一个图像?

image.tag = 1)--->标签的示例。

2 个答案:

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

接下来让我们为UIImage

添加4个方法
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共享实例:

  1. 保存当前图片与标签之间的关系
  2. 删除关系图片标记
  3. 检索与当前图像关联的所有标记
  4. 如何使用

    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]