ios - cerrar - como forzar detencion de whatsapp en iphone
¿Cómo agregar efectos de partículas a una aplicación iOS que no es un juego con iOS 7 SpriteKit Particle? (6)
2018
Esto es ahora muy fácil con Xcode moderno.
1. En Xcode, haga clic para crear un nuevo
"Archivo de partículas SpriteKit"
será un único archivo .sks
.
(No elija "Archivo de sistema de partículas SceneKit". Elija "Archivo de partículas SpriteKit").
Haga clic una vez en el archivo .sks
. Observe los muchos controles a la derecha .
Las partículas realmente se moverán, es una vista previa viviente. Cualquier cosa que se pueda hacer con partículas, puedes hacerlo. Es como usar partículas en un motor de juego, excepto que el rendimiento es 18 mil millones de veces mejor.
2. Tener cualquier UIView común, en cualquier lugar que desee:
@IBOutlet weak var teste: UIView! // totally ordinary UIView
3. Simplemente use el siguiente código para vincular:
La siguiente losa de código colocará su nuevo sistema de partículas, dentro de la UIView común "teste":
import SpriteKit ...
let sk: SKView = SKView()
sk.frame = teste.bounds
sk.backgroundColor = .clear
teste.addSubview(sk)
let scene: SKScene = SKScene(size: teste.bounds.size)
scene.scaleMode = .aspectFit
scene.backgroundColor = .clear
let en = SKEmitterNode(fileNamed: "SimpleSpark.sks")
en?.position = sk.center
scene.addChild(en!)
sk.presentScene(scene)
Agregue esto a lo que quiera.
Si quieres un botón brillante, agrégalo a un botón.
Si quieres que toda la pantalla lama el arco iris, agrégala a una vista de pantalla completa.
Es fácil.
Ejemplo de cómo usar el archivo de partículas de SpriteKit:
Digamos que quiere un estallido de chispas, que termina.
Establezca el máximo en 50 ...
Sugerencia: si su efecto "termina" (es decir, no es un bucle), parece que puede simplemente deshacerse de SKScene
cuando haya terminado. Me gusta esto:
...
scene.addChild(en!)
sk.presentScene(scene)
delay(1.5) { sk.removeFromSuperview() }
Esa línea de código al final parece limpiar todo.
Por cierto, si quieres ideas fantásticas para los sistemas de partículas, una buena idea es hacer clic en la "tienda de activos" de Unity, donde varios artistas de partículas compran y venden sistemas de partículas. Su trabajo te dará grandes ideas.
Simplemente haga clic en "partículas" en la lista a la derecha; mira los videos ( Ejemplos innovadores )
¡Nota! Apple lo hará para que puedas simplemente hacer un SKView en el guión gráfico y seleccionar la escena .sks
. Sin embargo ..
... ¡aún no funciona! Entonces necesitas el fragmento de código de arriba.
Necesito agregar un efecto de partículas de lluvia a mi aplicación, he estado teniendo dificultades para encontrar formas de ejecutar esta idea.
Traté de seguir este tutorial de acercamiento de CALayer: Link pero no estoy seguro de si este es el mejor enfoque, teniendo en cuenta el nuevo iOS 7 SpriteKit Particle Emitter disponible en Xcode 5.
Ya he creado el archivo .sks
y está en mi jerarquía, pero todavía no puedo agregarlo a mi guión gráfico / proyecto.
Dicho esto, ¿cómo puedo agregar una Partícula SpriteKit (sks) a mi vista? No estoy familiarizado con escenas, capas, etc. en el marco de SpriteKit ya que no soy un desarrollador de juegos. Necesito la mayor cantidad de detalles y códigos de muestra posibles para poder resolver esto, por favor
ACTUALIZACIÓN: He seguido la dirección provista en una respuesta por un compañero SO miembro: AyatollahAndy, por favor vea su respuesta a continuación. Aunque pude visualizar el SKScene
en mi view
la aplicación falla cuando se recibe cualquier evento táctil. Obtengo lo siguiente:
Gracias
Aquí hay un enfoque totalmente diferente para probar. Mi amigo me dio esta manera genial de irme. Usando CAEmitterCell
. Todo en código! Parece que necesitas una imagen spark.png.
extension UIView {
final public func ignite() {
let emitter = CAEmitterLayer()
emitter.frame = self.bounds
emitter.renderMode = kCAEmitterLayerAdditive
emitter.emitterPosition = self.center
self.layer.addSublayer(emitter)
let cell = CAEmitterCell()
let bundle = Bundle.init(for: UIColor.self)
let image = UIImage(named: "spark", in: bundle, compatibleWith: traitCollection)
cell.contents = image?.cgImage
cell.birthRate = 1500
cell.lifetime = 5.0
cell.color = UIColor(red: 1.0, green: 0.5, blue: 0.1, alpha: 1).cgColor
cell.alphaSpeed = -0.4
cell.velocity = 50
cell.velocityRange = 250
cell.emissionRange = CGFloat.pi * 2.0
emitter.emitterCells = [cell]
}
}
Disfrutar.
Cree un SKScene
en su UIView
para agregar un efecto de partícula SKEmitterNode
.
Una forma de hacer esto:
1. En el guión gráfico (o programáticamente, si lo prefiere) agregue un objeto Ver en la parte superior de la Vista existente y ajústelo según sus necesidades.
2.Cambie la clase de la nueva vista a SKView
3. En su controlador de vista, el archivo .h crea una propiedad para SKView
:
@property IBOutlet SKView *skView;
4. Vincule SKView
en su guión gráfico a la propiedad skView.
5.Crea una nueva clase, subclasificando SKScene
. MyScene.h se verá así:
#import <SpriteKit/SpriteKit.h>
@interface MyScene : SKScene
@end
MyScene.m a continuación contiene código para crear un efecto de partícula siempre y cuando se toque el SKView.
#import "MyScene.h"
@implementation MyScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
myLabel.text = @"Hello, World!";
myLabel.fontSize = 30;
myLabel.position = CGPointMake(CGRectGetMidX(self.frame),
CGRectGetMidY(self.frame));
[self addChild:myLabel];
}
return self;
}
//particle explosion - uses MyParticle.sks
- (SKEmitterNode *) newExplosion: (float)posX : (float) posy
{
SKEmitterNode *emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"MyParticle" ofType:@"sks"]];
emitter.position = CGPointMake(posX,posy);
emitter.name = @"explosion";
emitter.targetNode = self.scene;
emitter.numParticlesToEmit = 1000;
emitter.zPosition=2.0;
return emitter;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
//add effect at touch location
[self addChild:[self newExplosion:location.x : location.y]];
}
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
}
@end
6. En su controlador de vista principal, incluya su clase de escena:
#import "MyScene.h"
y agregue código a viewDidLoad para inicializar el SKView:
- (void)viewDidLoad
{
[super viewDidLoad];
// Configure the SKView
SKView * skView = _skView;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[skView presentScene:scene];
}
Deberías tener un SKScene
en SKScene
dentro de tu UIView
principal.
En realidad, hay una manera de agregar partículas sin SpriteKit - CAEmitterCells de CoreAnimation.
De esta forma, puede agregar partículas en su UIView fácilmente. Si desea jugar con los parámetros y obtener el código fácilmente, obtenga esta aplicación ( Partícula X ).
También es compatible con SpriteKit por lo que si desea jugar o diseñar partículas sobre la marcha e inmediatamente obtener el código para ello, esta aplicación es la solución.
PD. Si no lo has notado, soy el desarrollador de la aplicación, la hice para usarla yo mismo al diseñar aplicaciones y juegos. :)
No puede usar efectos de partículas dentro de UIView
directamente.
SKEmitterNode
debe estar en un árbol de nodos definido con una escena de nodo ( SKScene
). El nodo de escena ejecuta un bucle de animación que muestra el contenido del árbol de nodos para su visualización. UIView
es estático, no funcionará.
Sin embargo, es probable que puedas crear una escena dentro de tu UIView
, pero nunca he intentado hacer eso.
Puede agregar SKView como una subvista dentro de su jerarquía de UIKit. Una función como la siguiente funcionaría, lo que le permite crear un UIImageView con el efecto como una subvista, y luego puede agregar esto a su vista principal. Asegúrate de vincular con SpriteKit.
UIImageView *NewEffectUIImageViewWithFrame(CGRect frame)
{
UIImageView *tempView = [[UIImageView alloc] initWithFrame:frame];
SKView *skView = [[SKView alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, frame.size.height)];
[tempView addSubview:skView];
SKScene *skScene = [SKScene sceneWithSize:skView.frame.size];
skScene.scaleMode = SKSceneScaleModeAspectFill;
skScene.backgroundColor = [UIColor clearColor];
SKEmitterNode *emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"SparkParticle" ofType:@"sks"]];
emitter.position = CGPointMake(frame.size.width*0.5,0.0);
[skScene addChild:emitter];
[skView presentScene:skScene];
return tempView;
}
Al final, si todo lo que necesita es un emisor, puede ser más fácil crear un CAEmitterLayer
y agregarlo como una subcapa a su UIView. Por supuesto, eso significa que tiene que crear programáticamente CAEmitterLayer
y no puede usar el genial editor de partículas Xcode ...