MST

星途 面试题库

面试题:Swift Core Graphics实现图形动画

利用Swift的Core Graphics框架,创建一个动态变化的矩形,该矩形在视图内不断改变位置和大小,且其颜色也随之动态变化。描述实现这个动画的整体思路,并写出关键的代码逻辑(如定时器设置、图形绘制和更新相关代码)。
34.6万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建视图:创建一个继承自UIView的自定义视图,用于绘制矩形。
  2. 定时器设置:使用Timer定时触发更新操作,改变矩形的位置、大小和颜色。
  3. 图形绘制:在自定义视图的draw(_:)方法中,利用Core Graphics框架绘制矩形。
  4. 动画更新:每次定时器触发时,更新矩形的位置、大小和颜色,并调用setNeedsDisplay()方法触发重绘。

关键代码逻辑

  1. 自定义视图
import UIKit

class DynamicRectangleView: UIView {
    var rectangle = CGRect(x: 50, y: 50, width: 100, height: 100)
    var rectangleColor = UIColor.red
    var timer: Timer?

    override init(frame: CGRect) {
        super.init(frame: frame)
        startAnimation()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        startAnimation()
    }

    func startAnimation() {
        timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateRectangle), userInfo: nil, repeats: true)
    }

    @objc func updateRectangle() {
        // 改变矩形位置
        rectangle.origin.x += 10
        rectangle.origin.y += 10
        // 改变矩形大小
        rectangle.size.width += 10
        rectangle.size.height += 10
        // 改变矩形颜色
        rectangleColor = UIColor(red: CGFloat.random(in: 0...1), green: CGFloat.random(in: 0...1), blue: CGFloat.random(in: 0...1), alpha: 1)
        setNeedsDisplay()
    }

    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else { return }
        context.setFillColor(rectangleColor.cgColor)
        context.fill(rectangle)
    }
}
  1. 在视图控制器中使用自定义视图
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let dynamicView = DynamicRectangleView(frame: view.bounds)
        view.addSubview(dynamicView)
    }
}