2016-06-18 5 views
0

Im, создавая игру с символом collectionView, выбирающим в нижней части GameScene. Многие из символов заблокированы, поэтому я отображаю «Заблокированное» изображение в качестве изображения ячейки коллекции. Однако, когда пользователь разблокирует персонажа, и он снова загружает GameScene (перейдите в сцену gameOver, перезапустите игру до настоящего GameScene), мне нужно обновить изображения коллекции CollectionView и поменять изображение «Заблокировано» обычным образом. Ive пытался так много разных вещей, но он не работает. Он не будет заменять/перезагружать новые изображения. Я знаю, что это просто что-то маленькое, чего мне не хватает, но все мои коды связаны с представлением коллекции.Swift: Обновить CollectionView Cell Image

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.

+0

Вы не должны фильтровать подвиды вашего собственного контроллера подкласса, чтобы найти CollectionView. Можете ли вы поделиться иерархией «Inside Game Scene» в отношении «Inside Game View Controller»? – kezi

+0

@kezi Я отфильтровываю subViews, потому что когда игра перезапустится, он установит значение collectionView равным нулю, это решит эту проблему. Тем не менее, я не думаю, что это связано с проблемой, с которой я сталкиваюсь теперь с изображениями CollectionViewCell. Что вы подразумеваете под иерархией Inside Game Scene. Извините, я немного новичок в быстрой ха-ха. – OriginalAlchemist

+0

Да, я просто говорил, что вы можете сохранить ссылку на просмотр коллекции, чтобы вам не приходилось гадать с опцией '?'. По иерархии я имел в виду, в каком виде. Была ли сцена внутри зрения контроллера? И есть ли представление коллекции в одном представлении? – kezi

ответ

2

Вы попробовать это в одном месте ::

imageView.image = nil 

затем установить изображение, которое вы хотите обновить, как ..

imageView.image = UIImage(named : "YourImage") 
+0

Да. Я попытался сделать что-то подобное внутри функции didMoveToView. Не работает. – OriginalAlchemist

+0

Я считаю, что проблема связана с переходом на GameOverScene, а затем возвращается к GameScene. Он не должен перезаряжать ячейки. Вы можете видеть в GameScene, я должен был объявить «collectionView» с возвратом, чтобы он не был никем, когда я снова представляю GameScene после игры. – OriginalAlchemist

+0

1> попробуйте перезагрузить collectionView в viewWillAppear(), если он не будет работать, тогда 2> установите логику в itemAtIndexPath(), если необходимо, NSUserDefault(). Сначала поймите проблему. Это проблема с повторной эмиссией на 99%. – JAck

0

При необходимости «обновления» в коллекции View, скажите он перезагружает свои данные, затем все изображения должны обновляться по мере необходимости.

collectionView.reloadData()

Смежные вопросы