在用于iPad的Swift 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上的分屏多任务处理。