Constrain/center CAEmitterLayer 即使在设备旋转之后

Constrain/center CAEmitterLayer even after device rotation

在 Swift iPad 的 Playgrounds 中,我很难将 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

CALayer 不支持约束。看起来您想在 UIViewController 中执行此操作,因此将 emitterLayer.emitterPosition = CGPoint(x: view.center.x, y: view.center.y) 行移动到 viewDidLayoutSubviews 中,每次您的视图边界发生变化(即在旋转期间)时都会调用它。这将使您的发射器始终保持在中心,即使中心因其他原因而改变,例如 iPad.

上的分屏多任务处理