CollectionViewCell не будет отображать изображения Dynami c - PullRequest
1 голос
/ 01 мая 2020

Я создаю анимацию на экране. При просмотре загрузки страницы отображается обратная сторона карты в порядке. все 16 изображений показывают обратную сторону карты. После нажатия кнопки, чтобы перевернуть ее, мне нужно, чтобы CollectionViewCell показывал разные изображения (card_1.jpg, card_2.jpg и т. Д. c ..), но изображение отображается только в первой ячейке.

class CardsCollectionViewCell: UICollectionViewCell {

var deck: [Int] = []

@IBOutlet weak var numberLabel: UILabel!

let cardBackTag: Int = 0
let cardFrontTag: Int = 1

var cardViews: (frontView: UIImageView, backView: UIImageView)?

var imgViewFront: UIImageView!
var imgViewBack: UIImageView!

override func awakeFromNib() {
    self.imgViewFront = self.createCardViewWithImage(imageName: "card_1", tag: self.cardFrontTag)
    self.imgViewBack = self.createCardViewWithImage(imageName: "back-card", tag: self.cardBackTag)
    self.cardViews = (frontView: self.imgViewFront, backView: self.imgViewBack)
    self.contentView.addSubview(self.imgViewFront)
}

private func createCardViewWithImage(imageName: String, tag: Int) -> UIImageView {
    let newCardImageView = UIImageView(frame: self.frame)
    newCardImageView.image = UIImage(named: imageName)
    newCardImageView.tag = tag
    newCardImageView.clipsToBounds = true
    newCardImageView.contentMode = .scaleAspectFill
    return newCardImageView
}

func flipCardAnimation(indexPath: Int) {

    if (self.imgViewBack.superview != nil) {

        // front card
        self.numberLabel.textColor = UIColor.white
        self.numberLabel.backgroundColor = UIColor.orange
        self.numberLabel.clipsToBounds = true
        self.numberLabel.text = "\(self.deck[indexPath])"
        self.numberLabel.isHidden = false

        self.cardViews!.frontView.removeFromSuperview()
        self.imgViewFront = self.createCardViewWithImage(imageName: "card_\(self.deck[indexPath])", tag: self.cardFrontTag)
        self.cardViews = (frontView: self.imgViewFront, backView: self.imgViewBack)


    } else {
        // back card
        self.deck = [Int](repeating: 0, count: 16)
        self.numberLabel.isHidden = true

        self.cardViews = (frontView: self.imgViewBack, backView: self.imgViewFront)
    }

    let transitionOptions = UIView.AnimationOptions.transitionFlipFromLeft
    UIView.transition(with: self.contentView, duration: 0.5, options: transitionOptions, animations: {

        self.cardViews!.backView.removeFromSuperview()
        self.contentView.addSubview(self.cardViews!.frontView)

        }, completion: {finished in

    })
}
}

Я использовал этот пример статей для создания анимации. https://medium.com/@lawrey / creation-a-flip-card-animation-with-uicollectionviewcell-swift-3-0-98bc96317fee

В моем коде выше у меня есть метка, которая отображает число в indexPath внутри массива deck . но не изображение может кто-нибудь сказать мне, как динамически отображать все изображение? или что я делаю не так?

1 Ответ

0 голосов
/ 02 мая 2020

Итак, проведя вчера целый день, я решил, что пришло время изменить свой подход. Вместо этого я решил создать два изображения в раскадровке. Вот мой последний рабочий код. Это загружает все 16 карт с обратной стороны фотографии на карте, и при нажатии кнопки анимация переворачивания переходит к случайным 16 картам.

import UIKit
import Foundation
import ProgressHUD

class CardsCollectionViewCell: UICollectionViewCell {

    var deck: [Int] = []

    @IBOutlet weak var numberLabel: UILabel!
    @IBOutlet weak var imgViewBack: UIImageView!
    @IBOutlet weak var imgViewFront: UIImageView!

    var cardBack: Bool = true

    func flipCardAnimation(indexPath: Int) {

        numberLabel.isHidden = true

        let transitionOptions = UIView.AnimationOptions.transitionFlipFromLeft
        UIView.transition(with: self.contentView, duration: 0.5, options: transitionOptions, animations: {

            if self.cardBack == true {

                self.deck = [Int](repeating: 0, count: NUMBER_OF_CARDS_IN_DECK)
                self.imgViewBack.isHidden = false
                self.imgViewFront.isHidden = true

            } else {

                self.numberLabel.isHidden = false
                self.imgViewBack.isHidden = true
                self.imgViewFront.isHidden = false
            }

            if (self.cardBack != true) {
                // front card
                self.numberLabel.text = "\(self.deck[indexPath])"
                self.numberLabel.textColor = UIColor.white
                self.numberLabel.backgroundColor = .red
                self.numberLabel.layer.cornerRadius = 
                self.numberLabel.layer.frame.width/2
                self.numberLabel.layer.masksToBounds = true

                self.imgViewFront.image = UIImage(named: "card_\(self.deck[indexPath])")
                self.imgViewFront.tag = self.deck[indexPath]
                self.imgViewFront.contentMode = .scaleAspectFill
                self.imgViewFront.clipsToBounds = true
                self.imgViewFront.layer.cornerRadius = 12

            } else {
                // back card
                print(self.deck)
                self.numberLabel.text?.removeAll()
                self.imgViewBack.image = UIImage(named: "back-card-1")
                self.imgViewBack.tag = 1
                self.imgViewBack.contentMode = .scaleAspectFill
                self.imgViewBack.clipsToBounds = true
            }

            }, completion: {finished in

                if self.cardBack == true {
                    self.cardBack = false
                } else {
                    self.cardBack = true
                }
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...