实现思路
- 创建视图:创建一个继承自
UIView
的自定义视图,用于绘制矩形。
- 定时器设置:使用
Timer
定时触发更新操作,改变矩形的位置、大小和颜色。
- 图形绘制:在自定义视图的
draw(_:)
方法中,利用Core Graphics
框架绘制矩形。
- 动画更新:每次定时器触发时,更新矩形的位置、大小和颜色,并调用
setNeedsDisplay()
方法触发重绘。
关键代码逻辑
- 自定义视图
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)
}
}
- 在视图控制器中使用自定义视图
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let dynamicView = DynamicRectangleView(frame: view.bounds)
view.addSubview(dynamicView)
}
}