Ios 粒子发射器在一个应用程序中工作,但在另一个应用程序中不工作
我在粒子效果方面遇到了一些困难。最初,我发布了一个问题,关于在ios6设备上应用程序中的粒子效果如何不同 我最初在ios7设备上设计了这个应用程序,并得到了我想要的粒子,但在ios6设备上,粒子变小并移位 我被告知这是ios6和ios7之间的问题,改变媒体时间可以解决它 我什么都试过了,但都没用 最后,我尝试创建一个单独的应用程序,并粘贴本教程中的代码-在视图中加载。粒子按其应有的方式工作,但当我将相同的代码放入当前的应用程序时,viewDidLoad。粒子到处都是,没有做他们应该做的 我在想,在我当前的应用程序中是否有什么东西我遗漏了,那就是打乱了粒子。有人能提出要找的东西吗 最初,粒子效果是子类化的,并在向我的主视图添加子视图后调用 这是我的view controller.h代码(我取出了一些不相关的控件对象属性和输出) 这是我在ios7 iPad上使用的一个粒子效果,但在ios6 iPad上,效果看起来完全不同 在花了很长时间试图弄清楚为什么ios7和ios6看起来有所不同之后,我尝试将教程代码放入一个新的应用程序中,然后再放入我自己的应用程序中。在我的应用程序中,粒子是完全不同的,但在新的应用程序中应该是这样的 关于@matt在下面的评论。我知道我的应用程序一定有问题,但我看不到。我已经浏览了所有的网页和代码,我想我遗漏了一些东西 无论iOS版本如何,我想要的只是在特定位置出现的三个粒子效果。其中之一是用户触摸。下面的效果只是其中之一。我试过摄像,但没用 蒸汽效应Ios 粒子发射器在一个应用程序中工作,但在另一个应用程序中不工作,ios,particle-system,caemitterlayer,caemittercell,Ios,Particle System,Caemitterlayer,Caemittercell,我在粒子效果方面遇到了一些困难。最初,我发布了一个问题,关于在ios6设备上应用程序中的粒子效果如何不同 我最初在ios7设备上设计了这个应用程序,并得到了我想要的粒子,但在ios6设备上,粒子变小并移位 我被告知这是ios6和ios7之间的问题,改变媒体时间可以解决它 我什么都试过了,但都没用 最后,我尝试创建一个单独的应用程序,并粘贴本教程中的代码-在视图中加载。粒子按其应有的方式工作,但当我将相同的代码放入当前的应用程序时,viewDidLoad。粒子到处都是,没有做他们应该做的 我在想
#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];
}