Swift Animation ведет себя странно после изменения метки - PullRequest
0 голосов
/ 14 ноября 2018

В настоящее время я работаю над анимацией для своего приложения ios.Когда он запускается, три блока (UIView с границами) перемещаются вниз, и слева появляется новый блок.

Working Version

Он работает отлично, пока я не переоденусьтекст метки (номер блока) перед началом анимации.Блоки появляются в совершенно разных позициях и возвращаются в исходное положение.Они также меняют свой порядок.

enter image description here

Следующий код показывает мой класс блоков.Для анимации я использую getBlockView и "view.frame = GCRect (...)".Для изменения текста метки я использую функцию setBlockName (number: String).

В настоящее время я не имею ни малейшего представления, что может вызвать это, и был бы благодарен за каждое предложение, которое могло вызвать это странное поведение.

class myBlock {
        var positionID: Int
        var blockNumber: String
        let blockView: UIView
        let blockNumberLabel: UILabel

        init(blockNumber: String, heightScreen: CGFloat, widthScreen: CGFloat, positionID: Int) {
            self.positionID = positionID
            self.blockNumber = blockNumber
            blockView = {
                let view = UIView()
                view.autoSetDimension(.height, toSize: heightScreen / 6)
                view.autoSetDimension(.width, toSize: widthScreen - 80)
                view.layer.borderWidth = 3
                view.layer.borderColor = UIColor.MyTheme.primaryColor1.cgColor
                return view
            }()
            blockNumberLabel = {
                let label = UILabel()
                label.textColor = UIColor.MyTheme.primaryColor1
                label.font = UIFont(name: "ArialMT", size: 20)
                label.numberOfLines = 2
                label.textAlignment = .left
                label.adjustsFontForContentSizeCategory = true
                label.text = "Block Number: \(blockNumber)"
                label.isUserInteractionEnabled = false
                return label
            }()

            blockView.addSubview(blockNumberLabel)
            blockNumberLabel.autoPinEdge(toSuperviewEdge: .top, withInset: 5.0)
            blockNumberLabel.autoPinEdge(toSuperviewEdge: .left, withInset: 5.0)
            blockNumberLabel.autoPinEdge(toSuperviewEdge: .right, withInset: 5.0)

        }

        func getBlockView() -> UIView{
            return blockView
        }

        func setBlockName(number: String) {
            self.blockNumberLabel.text = "Block Number: \(number)"
        }

        func getBlockLabel() -> UILabel{
            return blockNumberLabel
        }

        func getID() -> Int {
            return positionID
        }

        func setID(id: Int) {
            self.positionID = id
            print("\(blockNumberLabel.text!): \(id)")
        }

    }

Код анимации:

   private func moveBlocksDown(blockNumber: String) {
    var resetBlock: UIView!
    let animationHeight =  (self.heightScreen / 6) + (self.blockDistance)



    UIView.animate(withDuration: 2.0, animations: {
        for var block in self.blockList {
            let id = block.getID()
            let blockView = block.getBlockView()
            if block.getID() == 0 {
                 block.setBlockName(number: blockNumber)
            }
            print(id)
            switch id {
            case 0:
                blockView.frame = CGRect(x: self.topX, y: self.topY, width: blockView.frame.width, height: blockView.frame.height)
                print(block.getBlockLabel().text!)
            case 1:
                blockView.frame = CGRect(x: self.topX, y: self.middleY, width: blockView.frame.width, height: blockView.frame.height)
                print(block.getBlockLabel().text!)
            case 2:
                blockView.frame = CGRect(x: self.topX, y: self.bottomY, width: blockView.frame.width, height: blockView.frame.height)
                print(block.getBlockLabel().text!)
            case 3:
                blockView.frame = CGRect(x: self.topX, y: (self.bottomY + animationHeight), width: blockView.frame.width, height: blockView.frame.height)
                print(block.getBlockLabel().text!)
                resetBlock = blockView
            default:
                print("Unknown ID")
            }
            print("NewID \((id + 1) % 4)")
            block.setID(id: (id + 1) % 4)
        }
    }, completion: { finish in  
       resetBlock.frame = CGRect(x: self.newX, y: self.newY, width: resetBlock.frame.width, height: resetBlock.frame.height)


    })


}
...