Ios 粒子发射器在一个应用程序中工作,但在另一个应用程序中不工作

Ios 粒子发射器在一个应用程序中工作,但在另一个应用程序中不工作,ios,particle-system,caemitterlayer,caemittercell,Ios,Particle System,Caemitterlayer,Caemittercell,我在粒子效果方面遇到了一些困难。最初,我发布了一个问题,关于在ios6设备上应用程序中的粒子效果如何不同 我最初在ios7设备上设计了这个应用程序,并得到了我想要的粒子,但在ios6设备上,粒子变小并移位 我被告知这是ios6和ios7之间的问题,改变媒体时间可以解决它 我什么都试过了,但都没用 最后,我尝试创建一个单独的应用程序,并粘贴本教程中的代码-在视图中加载。粒子按其应有的方式工作,但当我将相同的代码放入当前的应用程序时,viewDidLoad。粒子到处都是,没有做他们应该做的 我在想

我在粒子效果方面遇到了一些困难。最初,我发布了一个问题,关于在ios6设备上应用程序中的粒子效果如何不同

我最初在ios7设备上设计了这个应用程序,并得到了我想要的粒子,但在ios6设备上,粒子变小并移位

我被告知这是ios6和ios7之间的问题,改变媒体时间可以解决它

我什么都试过了,但都没用

最后,我尝试创建一个单独的应用程序,并粘贴本教程中的代码-在视图中加载。粒子按其应有的方式工作,但当我将相同的代码放入当前的应用程序时,viewDidLoad。粒子到处都是,没有做他们应该做的

我在想,在我当前的应用程序中是否有什么东西我遗漏了,那就是打乱了粒子。有人能提出要找的东西吗

最初,粒子效果是子类化的,并在向我的主视图添加子视图后调用

这是我的view controller.h代码(我取出了一些不相关的控件对象属性和输出)

这是我在ios7 iPad上使用的一个粒子效果,但在ios6 iPad上,效果看起来完全不同

在花了很长时间试图弄清楚为什么ios7和ios6看起来有所不同之后,我尝试将教程代码放入一个新的应用程序中,然后再放入我自己的应用程序中。在我的应用程序中,粒子是完全不同的,但在新的应用程序中应该是这样的

关于@matt在下面的评论。我知道我的应用程序一定有问题,但我看不到。我已经浏览了所有的网页和代码,我想我遗漏了一些东西

无论iOS版本如何,我想要的只是在特定位置出现的三个粒子效果。其中之一是用户触摸。下面的效果只是其中之一。我试过摄像,但没用

蒸汽效应

#import <UIKit/UIKit.h>

@interface SteamEffect : UIView

@end
我从我的viewcontroller.m调用了上面的命令。上面的viewDidLoad中还有一个计时器,每5秒调用一次。尽管这可能不是解决问题的方法。与每次添加一个新视图相比,最好添加视图并每5秒启动一次,但这是一个不同的问题

- (void)ShowSteamEffect
{
//Check System Version because NSAttributedString only works in ios6 and above.
NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];


//Create view for Steam particle effect.
//CGRect SteamFrame = CGRectMake(790, 380, 100, 100); //ORIGINAL
CGRect SteamFrame = CGRectMake(0, 0, 0, 0); //(815, 455, 100, 100)
//Show Steam effect
ShowSteam = [[SteamEffect alloc]initWithFrame:SteamFrame];
ShowSteam.hidden = NO;

[self.view insertSubview:ShowSteam aboveSubview:imgComputerLights];

}

这样想:如果它在你粘贴教程代码的单独应用程序中有效,但在你当前的应用程序中无效,那么你在当前的应用程序中做了一些不同的事情(即错误)。试着找出那是什么。谢谢马特。我意识到这一点。我花了几个小时在这上面,看不出有什么不同的原因。这就是问题所在。韦恩代码添加。不确定是否还有其他代码需要显示。在
viewdiload:
中,视图还没有准备好进入黄金时段。如果您只需从
viewDidLoad:
中删除所有代码并将其放入
viewdide:
,是否有帮助?我并不是说这是最终的解决方案;我只是想让你们试验一下,看看不在
viewDidLoad
中做这些是否有帮助。谢谢Matt。我只是试着把教程中的发射器代码放到viveDidLoad中:但是没有任何改变。这些粒子应该以一个小的浓缩扇形向左上方发射,但相反,它们以一个高度放大并扩散的扇形向右下方发射。
#import <UIKit/UIKit.h>

@interface SteamEffect : UIView

@end
#import "SteamEffect.h"

@implementation SteamEffect

{
CAEmitterLayer* SteamEmitter;
}

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

    // Initialization code
    SteamEmitter = (CAEmitterLayer*) self.layer;
    //SteamEmitter.emitterPosition= CGPointMake(0, 0);
    //SteamEmitter.emitterSize = CGSizeMake(10,10);
    CAEmitterCell* Steam = [CAEmitterCell emitterCell];
    Steam.birthRate = 50.0f;
    Steam.spin = .6f;
    Steam.lifetime = 1.7f;
    Steam.alphaRange = 0.2f;
    Steam.alphaSpeed = 0.2f;
    Steam.contents = (id)[[UIImage imageNamed:@"Steam1.png"]CGImage];
    Steam.velocity = 30;
    Steam.velocityRange = 50.0f;
    Steam.emissionLongitude = -60.0f;
    Steam.emissionRange = M_1_PI;
    Steam.scale = .2f;
    Steam.scaleSpeed = .5f;
    Steam.yAcceleration = -200.0f;


    //SteamEmitter.renderMode =  kCAEmitterLayerBackToFront;//kCAEmitterLayerAdditive;
    //SteamEmitter.emitterShape = kCAEmitterLayerCircle;
    SteamEmitter.emitterCells = @[Steam];
    SteamEmitter.emitterPosition = CGPointMake(815, 445);

    //Check System Version
    NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];

    if ([[vComp objectAtIndex:0] intValue] == 7) {
        // iOS-6 code
        SteamEmitter.beginTime = CACurrentMediaTime();
    }

}
    return self;
}

-(void)didMoveToSuperview
{
//1
[super didMoveToSuperview];
if (self.superview==nil) return;

[self performSelector:@selector(disableEmitterCell) withObject:nil afterDelay:0.5];
}

-(void)disableEmitterCell
{
[SteamEmitter setValue:@0 forKeyPath:@"birthRate"]; 

}

+ (Class) layerClass
{
//tell UIView to use the CAEmitterLayer root class
return [CAEmitterLayer class];
}

- (void) setEmitterPosition:(CGPoint)pos
{
SteamEmitter.emitterPosition = pos;
}
- (void) toggleOn:(bool)on
{
//SteamEmitter.birthRate = on? 300 : 0;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
- (void)ShowSteamEffect
{
//Check System Version because NSAttributedString only works in ios6 and above.
NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];


//Create view for Steam particle effect.
//CGRect SteamFrame = CGRectMake(790, 380, 100, 100); //ORIGINAL
CGRect SteamFrame = CGRectMake(0, 0, 0, 0); //(815, 455, 100, 100)
//Show Steam effect
ShowSteam = [[SteamEffect alloc]initWithFrame:SteamFrame];
ShowSteam.hidden = NO;

[self.view insertSubview:ShowSteam aboveSubview:imgComputerLights];

}