У меня есть функция, называемая changeBallColor()
, которая вызывается каждый раз, когда NSTimer I создавал огни (который установлен на 2-секундные интервалы). Цель состоит в том, чтобы изменить цвет мяча каждые 2 секунды на случайный цвет, не повторяя два цвета подряд. За исключением того, что цвет меняется почти мгновенно, а иногда и занимает 4 секунды. Когда это занимает больше времени, я заметил в отладчике xcode, что использование ЦП на 99% мгновенно до изменения цвета. Делает ли arc4random_uniform()
какое-то время или что-то (в тех случаях, когда используется цикл while)? Если да, то как я могу оптимизировать этот код, чтобы он работал безупречно? Извините, я новичок, когда дело доходит до Свифта.Swift Почему мой NSTimer не срабатывает равномерно?
func changeBallColor() {
var previousint: UInt32?
var randint = arc4random_uniform(4)
while previousint == randint {
randint = arc4random_uniform(4)
}
previousint = randint
if previousint == 0 {
imageBall.image = UIImage(named: "circle_g.png")
} else if previousint == 1 {
imageBall.image = UIImage(named: "circle_b.png")
} else if previousint == 2 {
imageBall.image = UIImage(named: "circle_r.png")
} else if previousint == 3 {
imageBall.image = UIImage(named: "circle_y.png")
}
}
ваша логика не ударяя тот же цвет дважды неисправен, так как 'previousint' - локальная переменная. Подумайте о том, чтобы добавить утверждения 'print', рассказывающие вам, какие случайные числа попадают в цикл и как часто цикл выполняется (всегда 0 раз) и т. Д. – luk2302
О, дух ...' previousint' получает redeclared каждый раз, когда запускается NSTimer, это вверх. Переместил его до вершины моего класса ViewController, и теперь он работает безупречно. Спасибо и извините за то, что тратили свое время с такой глупой проблемой. – modernwar24