gpt4 book ai didi

iOS 7 CAEmitterLayer 不恰本地产生粒子

转载 作者:IT王子 更新时间:2023-10-29 08:05:17 25 4
gpt4 key购买 nike

我似乎无法解决的奇怪问题仅在 iOS 7 上,当出生率最初设置为非零值时,CAEmitterLayer 会在屏幕上错误地生成粒子.就好像它计算了层在未来的状态。

// Create black image particle
CGRect rect = CGRectMake(0, 0, 20, 20);
UIGraphicsBeginImageContext(rect.size);
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Create cell
CAEmitterCell *cell = [CAEmitterCell emitterCell];
cell.contents = (__bridge id)img.CGImage;
cell.birthRate = 100.0;
cell.lifetime = 10.0;
cell.velocity = 100.0;

// Create emitter with particles emitting from a line on the
// bottom of the screen
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.emitterShape = kCAEmitterLayerLine;
emitter.emitterSize = CGSizeMake(self.view.bounds.size.width,0);
emitter.emitterPosition = CGPointMake(self.view.bounds.size.width/2,
self.view.bounds.size.height);
emitter.emitterCells = @[cell];

[self.view.layer addSublayer:emitter];

我在 DevForums 上看到一篇帖子,其中一些人提到他们在使用 iOS 7CAEmitterLayer 时遇到了类似的问题,但没有人知道如何解决它。现在 iOS 7 不再是测试版,我想我应该在这里问一下,看看是否有人可以破解它。我真的希望这不仅仅是我们必须等待 7.0.17.1 修复的错误。任何想法将不胜感激。谢谢!

最佳答案

是的!

我自己花了几个小时解决这个问题。

为了获得与我们之前使用的一些策略相同的 birthRate 动画。

首先,如果您希望层在添加到 View 时看起来像是开始发射,您需要记住 CAEmitterLayerCALayer 的子类,它符合CAMediaTiming 协议(protocol)。我们必须将整个发射器层设置为在当前时刻开始:

emitter.beginTime = CACurrentMediaTime();
[self.view.layer addSublayer:emitter];

It's as if it calculates the state the layer would be in the future.

你非常接近,但实际上发射器是在过去开始的。

其次,要在 0 和 n 的出生率之间设置动画,我们可以使用之前的效果来操纵生命周期属性:

if (shouldBeEmitting){
emitter.lifetime = 1.0;
}
else{
emitter.lifetime = 0;
}

请注意,我在发射器层本身上设置了 lifetime。这是因为当发射发射器单元格时,此属性的版本会乘以发射器层中的值。设置发射器层的 lifetime 可以设置所有发射器单元的 lifetime 的倍数,让您可以轻松地打开和关闭它们。

关于iOS 7 CAEmitterLayer 不恰本地产生粒子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913484/

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