Swift:更新CollectionView Cell Image

时间:2016-06-18 02:05:22

标签: ios swift uicollectionview

我正在GameScene底部制作一个具有collectionView字符选择的游戏。许多角色都被锁定了,所以我会显示一个" Locked"图像作为集合视图单元格图像。但是,当用户解锁角色并再次加载GameScene时(移动到gameOver场景,重新启动游戏回到现在的GameScene),我需要更新collectionView单元格图像并换掉" Locked"图像与常规图像。我尝试了很多不同的东西,但它不起作用。它不会换出/重新加载新图像。我知道它只是我失踪的小东西但是我的所有代码都与集合视图相关联。

class CharactersCollectionViewCell: UICollectionViewCell {

//MARK : Public API
var characters : NACharacters!{
    didSet{
        updateUI()
    }
}

//MARK : Private
@IBOutlet weak var featuredImageView: UIImageView!


private func updateUI(){
    self.layer.borderColor = UIColor.whiteColor().CGColor
    self.layer.borderWidth = 2.5
    self.layer.masksToBounds = true
    self.layer.cornerRadius  = CGFloat(roundf(Float(self.frame.size.width/2.0)))
    featuredImageView.image = characters.featuredImage
}

}
class NACharacters {

var featuredImage : UIImage!

static var characterLineUp = [NACharacters]()

init(featuredImage: UIImage){

    self.featuredImage = featuredImage
}

static func createCharacters() -> [NACharacters]{

    print("Inside create character")

    characterLineUp.insert(NACharacters(featuredImage: UIImage(named: "DiploSquadCollectionView")!), atIndex: 0)


    characterLineUp.insert(NACharacters(featuredImage: UIImage(named: "LockedNBAPlayersCollectionView")!), atIndex: 1)
    if(NSUserDefaults().unlockNBAPlayers == true){
        characterLineUp[1].featuredImage = UIImage(named: "NBAPlayersCollectionView")!
    }


    characterLineUp.insert(NACharacters(featuredImage: UIImage(named: "LockedLeanSquadCollectionView")!), atIndex: 2)
    if(NSUserDefaults().totalDabs >= 10000){
        print("setting up lean to be unlocked")
        characterLineUp[2].featuredImage = UIImage(named: "LeanSquadCollectionView")!
    }

    return characterLineUp
  }
}
//Inside Game View Controller
@IBOutlet var collectionView: UICollectionView!

//MARK : Data Source
internal var characters = NACharacters.createCharacters()

extension GameViewController : UICollectionViewDataSource, UICollectionViewDelegate{

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return characters.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Storyboard.CellIdentifier, forIndexPath: indexPath) as! CharactersCollectionViewCell

    cell.characters = self.characters[indexPath.item]

    return cell
}
//Inside Game Scene
    var collectionView: UICollectionView? {
    return self.view?.subviews.filter{ $0 is UICollectionView }.first as? UICollectionView
}

override func didMoveToView(view: SKView) {
//INSIDE HERE I NEED TO UPDATE THE COLLECTION VIEW CELL IMAGES
}

我知道这看起来像很多代码,但大部分都非常标准。我向您展示了所有这些,以便我们可以确切地指出错误或需要做些什么才能使其发挥作用。这是我与collectionView相关的所有代码。

2 个答案:

答案 0 :(得分:3)

您是否在同一个地方尝试过这个::

import UIKit

//Quantity of          A    A-   B+   B    B-   C+   C    C-   D+   D    D-   F
var gradesQuantity = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
var gradesAdded = 0.0
var gpa = 0.0

func addGrades(grades: [Double]) -> Double {
    for grade in grades {
        gradesAdded += grade
        if gradesQuantity[0] <= 0 {
            gradesQuantity[0] = 0
        }
    }

    return gradesAdded
}

func calcGPA(grades: [Double]) -> Double {
    gpa = (grades[0] * 4.0 + grades[1] * 3.7 + grades[2] * 3.3 + grades[3] * 3.0 + grades[4] * 2.7 + grades[5] * 2.3 + grades[6] * 2.0 + grades[7] * 1.7 + grades[8] * 1.3 + grades[9] * 1.0 + grades[10] * 0.7) / gradesAdded

    return gpa
}

class ViewController: UIViewController {

    @IBOutlet weak var GPALabel: UILabel!
    @IBOutlet weak var GPANumber: UILabel!
    @IBOutlet weak var AQuantity: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func AddA() {
        gradesQuantity[0] += 1.0
        addGrades(gradesQuantity)
        let x = calcGPA(gradesQuantity)
        GPANumber.text = String(x)
        AQuantity.text = String(Int(gradesQuantity[0]))
    }

    @IBAction func SubtractA() {
        gradesQuantity[0] -= 1.0
        addGrades(gradesQuantity)
        let x = calcGPA(gradesQuantity)
        GPANumber.text = String(x)
        AQuantity.text = String(Int(gradesQuantity[0]))
    }
}

然后将要更新的图像设置为..

imageView.image = nil

答案 1 :(得分:0)

当您需要刷新&#39;收集视图,告诉它重新加载其数据,然后所有图像应根据需要更新。

collectionView.reloadData()