Можно ли приостановить CAEmitterLayer? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть экземпляр CAEmitterLayer, который испускает CAEmitterCells.Мне интересно, возможно ли приостановить этот слой так, чтобы новые CAEmitterCells не создавались, а те, которые были созданы, оставались зафиксированными в своем положении на экране?Затем, когда экземпляр CAEmitterLayer "не приостановлен", фиксированные CAEmitterCells на экране снова начинают двигаться.

Спасибо за любую помощь здесь.

РЕДАКТИРОВАТЬ

Настройка:

emitterLayer.speed = 0.1

, где emitterLayer - это экземпляр подкласса CAEmitterLayer, просто полностью удаляет слой из вида .

Установка:

emitterLayer.lifetime = 0.0

просто останавливает любой новый производимый emitterCells, но не "замораживает" существующий emitterCells в текущей позиции .

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете установить для свойства lifetime CAEmitterLayer значение 0, что приведет к тому, что новые испускаемые ячейки даже не будут отображаться, но оставит уже существующие ячейки без изменений.Если вы хотите «снять паузу» с вашего эмиттерного слоя, вы можете просто сбросить lifetime до того, что было до паузы.

Чтобы также заморозить существующие ячейки, вы можете установить speed в 0, а также добавьте timeOffset.

extension CAEmitterLayer {
    func pause() {
        // Freeze existing cells
        self.speed = 0
        self.timeOffset = convertTime(CACurrentMediaTime(), from: self)
        // Stop creating new cells
        self.lifetime = 0
    }
}

Тогда вы можете просто назвать его как emitterLayer.pause()

...