gpt4 book ai didi

ios - CAEmitterLayer 最终在添加 EmitterCells 时有延迟

转载 作者:行者123 更新时间:2023-11-29 11:25:03 28 4
gpt4 key购买 nike

我们一直看到的一个非常奇怪的问题(下面的 gif),

  1. 我们有一个呈现的 View Controller ,它有一个 TeamBadgeView,这是一个以 CAEmitterCells
  2. 形式发出表情符号的按钮
  3. 点击此按钮可让用户在屏幕上发送垃圾表情符号
  4. 关闭呈现的 View Controller ,并重新呈现 View Controller ,现在有延迟。我呈现/关闭 View Controller 的次数越多,CAEmitterCell 变得越来越无响应
  5. 已确认这不是泄漏问题, View Controller 和按钮已正确释放
  6. 我试过移动 CAEmitterLayerCAEmitterCell,在按钮中保存一个引用,并在本地声明,但类似的问题
  7. 也许最奇怪的是,如果我根本不按下按钮,只是多次呈现/关闭 View Controller ,然后按下按钮,就会出现延迟。唯一没有延迟的时间是在第一次显示 View Controller 时按下按钮
  8. 我已确认每次我向按钮发送垃圾邮件时,按钮的 action 都被正确触发。只是发射器单元有几秒钟没有渲染。一些发射器单元根本不渲染

这已经到了令人难以置信的地步,有人对这可能是什么有任何想法或线索吗?

ViewController的第一次展示:
enter image description here

在第 5 次呈现 ViewController 之后(以相同的速度按下按钮):

enter image description here

View Controller 代码:

let teamBadgeView = TeamBadgeView.fromNib()
teamBadgeView.configure()

按钮代码:

class TeamBadgeView: UIView {
let emitter = CAEmitterLayer()
let fireSize = CGSize(width: 16, height: 18)
let fireScale: CGFloat = 0.8

func configure() {
emitter.seed = UInt32(CACurrentMediaTime())
emitter.emitterPosition = CGPoint(x: bounds.midX, y: 0)
emitter.emitterShape = CAEmitterLayerEmitterShape.line
emitter.emitterSize = fireSize
emitter.renderMode = CAEmitterLayerRenderMode.additive
layer.addSublayer(emitter)
}

@IBAction func tapAction(_ sender: Any) {
emitFire()
}

private func emitFire() {
let cell = CAEmitterCell()
let beginTime = CACurrentMediaTime()
cell.birthRate = 1
cell.beginTime = beginTime
cell.duration = 1
cell.lifetime = 1
cell.velocity = 250
cell.velocityRange = 50
cell.yAcceleration = 100
cell.alphaSpeed = -1.5
cell.scale = fireScale
cell.emissionRange = .pi/8
cell.contents = NSAttributedString(string: "🔥").toImage(size: fireSize)?.cgImage

emitter.emitterCells = [cell]
}
}

最佳答案

而不是每次都设置 emitterCells 数组:

emitter.emitterCells = [cell]

...将新单元格附加到它。如果它为 nil,请确保将其初始化为空数组,否则追加将不起作用:

if emitter.emitterCells == nil {
emitter.emitterCells = []
}

emitter.emitterCells?.append(cell)

关于ios - CAEmitterLayer 最终在添加 EmitterCells 时有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59312018/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com