Ограничение / центр CAEmitterLayer даже после поворота устройства - PullRequest
0 голосов
/ 22 марта 2019

В Swift Playgrounds для iPad у меня возникают трудности с постоянным ограничением экземпляра CAEmitterLayer в центре. Например, он остается в центре, пока устройство не будет повернуто, поэтому мне нужно найти способ ограничить его центром для всех ориентаций устройства.

Вот то, что я имею до сих пор, имейте в виду, что я пытался добавить наблюдателей к ориентации устройства безрезультатно. Но это может быть просто ошибкой с моей стороны. Спасибо!

emitterLayer.emitterPosition = CGPoint(x: view.center.x, y: view.center.y)

let cell = CAEmitterCell()
cell.birthRate = 25
cell.lifetime = 30
cell.velocity = 250
cell.velocityRange = 250
cell.spinRange = 5
cell.scale = 0.04
cell.scaleRange = 0.03
cell.alphaSpeed = -0.15
cell.emissionRange = CGFloat.pi * 2
cell.contents = UIImage(named: "RainbowApple")?.cgImage

emitterLayer.emitterCells = [cell]
emitterLayer.beginTime = CACurrentMediaTime()
emitterLayer.zPosition = -1
view.layer.addSublayer(emitterLayer)

emitterLayer.emitterSize = CGSize(width: 320, height: 1)
emitterLayer.renderMode = CAEmitterLayerRenderMode.oldestLast

1 Ответ

0 голосов
/ 22 марта 2019

CALayer не поддерживает ограничения. Похоже, что вы хотите сделать это в UIViewController, поэтому переместите строку emitterLayer.emitterPosition = CGPoint(x: view.center.x, y: view.center.y) в viewDidLayoutSubviews, которая вызывается каждый раз, когда изменяются границы ваших представлений (т.е. во время вращения). Это всегда будет держать ваш излучатель в центре, даже если центр изменится по другой причине, такой как многозадачность с разделенным экраном на iPad.

...