使用计时器对Shape / Image Swift进行动画处理

时间:2019-06-26 18:44:43

标签: swift

我主要使用JavaScript进行编码,但是我必须使用Swift编写项目。因此,为了加快学习速度,我希望编写与JavaScript编写方式非常相似的Swift代码。

在JavaScript中,我有一个方法draw(),我每毫秒调用一次该方法。例如,在draw()中,我可以在画布上绘制一个Square(场景)。然后,如果我增加正方形的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 Support的原因。我做了一个类sim,其中有drawScene函数,在该函数中,我首先在整个场景上绘制一个矩形,然后绘制一个圆。再次调用该矩形时,它会画在上一个圆上。并画出一个新的圆圈。但是,正如我提到的那样,这看起来确实很断断续续。我将如何使其顺畅。

0 个答案:

没有答案