UIView.animate и CGRect не работают - Swift 4 - PullRequest
0 голосов
/ 15 мая 2018

Я делаю это приложение, в котором, когда вы нажимаете кнопку, персонаж поднимается, а после этого опускается (я хочу, чтобы он действовал так: когда его нажимают, он должен подняться на 200 лет, затем начинает спускаться) Это мой код:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var TheCharacter: UIImageView!
    @IBOutlet weak var TheRocket: UIImageView!

    @IBAction func TheCharacterJumps(_ sender: Any) {

        let TheCharacterY = self.TheCharacter.frame.origin.y
        UIView.animate(withDuration: 0.35, animations: {
            self.TheCharacter.frame = CGRect(x: 167, y: TheCharacterY - 194, width: 40, height: 40)
        }) { (finished) in

        }
        UIView.animate(withDuration: 2, animations: {
            self.TheCharacter.frame = CGRect(x: 167, y: TheCharacterY + 435, width: 40, height: 40)
        }) { (finished) in

        }
    }
}

Итак, это так: Когда кнопка нажата, персонаж поднимается, а затем начинает падать. Но когда кнопка нажимается два или более раз подряд, вместо того, чтобы подниматься выше 200 лет, она поднимается только до 50 лет. Как я могу предотвратить это?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Если вы собираетесь реализовать игру из этого использования, возможно, лучше взглянуть на SpriteKit вместо UIKit. Взгляните на SKSpriteNode и как добавить SKPhysicsBody.

0 голосов
/ 16 мая 2018

Если вы хотите «нестабильную» анимацию, вы должны использовать динамические аниматоры и добавить гравитацию к сцене и силу для элементов. Затем UIKit будет рассчитывать анимации.

Документ Apple: UIDynamicAnimator .

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

Посмотрите на учебник Рэя Вендерлиха: нажмите

...