Анимируйте Shape / Image Swift с помощью таймера - PullRequest
0 голосов
/ 26 июня 2019

Я в основном пишу на JavaScript, но для проекта мне нужно написать на Swift.Таким образом, чтобы ускорить процесс обучения, я хочу написать код Swift, очень похожий на тот, который я написал бы в JavaScript.

В JavaScript у меня есть метод draw(), я вызываю этот метод каждую миллисекунду.Например, в draw() я мог нарисовать квадрат на холсте (сцене).Затем, если я увеличиваю позицию X квадрата, когда снова вызывается draw(), Квадрат перемещается.То же самое можно сделать с изображениями, поэтому с помощью этой базовой логики можно построить игру.

Теперь в Swift я попытался сделать нечто подобное, создать метод, аналогичный draw(), и вызватьэтот метод снова и снова.Тем не менее, анимация действительно прерывистая и медленная, и если бы я делал то же самое в JavaScript, она выглядит хорошо.

import UIKit
import PlaygroundSupport
import Foundation
public class sim : UIView{
    var circleX = 100;
    var circleY = 135;

    public init(){
        super.init(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
        self.backgroundColor = #colorLiteral(red: 0.9428111294, green: 0.9428111294, blue: 0.9428111294, alpha: 1)

        var simulationTimer = Timer.scheduledTimer(timeInterval: 0.00001, target: self, selector: #selector(drawScene), userInfo: nil, repeats: true)
    }

    @objc func drawScene(){
        let background = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
        background.backgroundColor = #colorLiteral(red: 0.9428111294, green: 0.9428111294, blue: 0.9428111294, alpha: 1)
        self.addSubview(background)

        circleX+=5
        let circle = UIView(frame: CGRect(x: circleX, y: circleY, width: 30, height: 30))
        circle.backgroundColor = #colorLiteral(red: 0.4633018092, green: 0.4633018092, blue: 0.4633018092, alpha: 1)
        circle.layer.cornerRadius = 15
        circle.layer.borderWidth = 3.0
        circle.layer.borderColor = #colorLiteral(red: 0.2512571216, green: 0.2528424561, blue: 0.2970899045, alpha: 1)

        self.addSubview(circle)
    }

    public required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

PlaygroundPage.current.liveView = sim()

Поэтому я использовал Playgrounds, поэтому я импортировал поддержку Playground.Я создал класс sim, в котором у меня есть функция drawScene, где я сначала рисую прямоугольник по всей сцене, а затем рисую круг.Когда он вызывается снова, прямоугольник рисует поверх предыдущего круга.И новый круг нарисован.Однако, как я уже говорил, это выглядит очень изменчиво и не гладко.Как бы я сделал это гладко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...