+ bubbles[i].phase) * 0.4 let dt = lastTime.map { date.timeIntervalSince($0) } ?? 0 var count = Int(abs(motionManager.spawnRate * dt)) λΠϜΠϯλʔόϧ(dt) * ࿈ଓͰৼͬͨճ(spawnRate) Ͱ๐ͷݸΛཧ ๐ͷΞχϝʔγϣϯ for _ in 0..<count { bubbles.append( BubbleModel( x: .random(in: 0…size.width), y: size.height + CGFloat.random(in: 0...bottomBand), radius: .random(in: 10...20), speed: .random(in: 40...400), phase: .random(in: 0...(.pi * 2)) ) ) } ๐ͷαΠζɾɾ༳Εํ ΛϥϯμϜʹ ఆظߋ৽ͯ͠๐Λඳը TimelineView(.animation) { timeline in GeometryReader { geo in Canvas { context, _ in draw(context: context) } AIʹؙ͛͠·ͨ͠