Как привязать CAEmitterLayer () к движущемуся UIImageView - PullRequest
0 голосов
/ 23 октября 2019

У меня был вопрос, который, вероятно, очень прост, но я не могу его получить!

Я бы хотел привязать CAEmitterLayer к UIImageView, который будет немного анимироваться на экране. ,Я использую UIKit с xCode.

Есть просто функция, которая запускается для анимации UIImageView в другом месте, и в то же время, что это происходит, я также создаю CAEmitterLayer под ImageView, который должен привязатьк нему и двигаться вместе с ним (создав след ячеек-эмиттеров), но вместо этого он остается там, где изначально был UIImageView. Вот код, который создает CAEmitterLayer:

    //This is called when the star pops upwards to shoot out little stars below it.
func createStarTrail() {

    starTrailEmitter.emitterShape = CAEmitterLayerEmitterShape.point
    starTrailEmitter.emitterMode = .surface
    starTrailEmitter.emitterPosition = CGPoint(x: star.frame.midX, y: star.frame.minY)
    starTrailEmitter.emitterSize.width = star.frame.width/2
    starTrailEmitter.renderMode = CAEmitterLayerRenderMode.additive
    starTrailEmitter.beginTime = CACurrentMediaTime()
    starTrailEmitter.zPosition = 2

    let cell = CAEmitterCell()
        cell.birthRate = 20 //How many cells are created per second
        cell.lifetime = 1.2 //How long a cell shows for (sec)
        cell.lifetimeRange = 0.3 //How much a cell's lifetime varies either way (sec)
        cell.alphaRange = 0 //The range of alpha each created cell will have
        cell.alphaSpeed = -1/10 //-1.0/2.0 //Over the course of the cell's lifetime, it will fade to nothing. (full alpha / cell lifetime)
        cell.velocity = 180 //How fast the cells move
        cell.velocityRange = 20 //How much the created cell's velocity can vary
        cell.emissionRange = CGFloat.pi/5 //Creates the cone shape (angle) in which cells can shoot out from the Emission Longitude
        cell.emissionLongitude = CGFloat.pi/2 //The direction the cells shoot out in radians (0 is directly right)
        cell.spinRange = 6
        cell.scale = 0.06
        cell.scaleRange = 0.03
        cell.contents = UIImage(named: "passOne")!.cgImage
    starTrailEmitter.emitterCells = [cell]

    mainView.layer.addSublayer(starTrailEmitter)

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {self.starTrailEmitter.birthRate = 0.0}
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {self.starTrailEmitter.removeFromSuperlayer()}
}

Спасибо за любую помощь, которую вы можете предоставить!

PS. Я также попробовал starTrailEmitter.anchorPoint, но, похоже, это не имело значения.

...