- crear un proyecto simple en XCode vista
- conjunto para recibir eventos multi-touch
- responder de touchesBegan, crean CALayer al detectar eventos táctiles
- hacer una opacidad fundido de salida de animación para CALayer
- cuando parada de animación, eliminar CALayer de padres
esperar: CALayer desaparecen normalmenteiPhone: eliminar CALayer cuando parada de animación, CALayer flash antes de desaparecer
real: Flash CALayer (abrir y cerrar) antes de desaparecer
código fuente completo:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.multipleTouchEnabled = YES;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch* touch in touches) {
CGPoint p = [touch locationInView:self.view];
//NSLog(@"touch=%@ p=%@", touch, NSStringFromCGPoint(p));
CALayer *layer = [CALayer layer];
layer.position = p;
layer.bounds = CGRectMake(0, 0, 70, 70);
layer.cornerRadius = 30;
layer.masksToBounds = NO;
layer.backgroundColor = [UIColor colorWithRed:102.0/255.0 green:156.0/255.0 blue:255.0/255.0 alpha:0.8].CGColor;
layer.shouldRasterize = YES;
CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeOutAnimation.fromValue = [NSNumber numberWithFloat:1.0];
fadeOutAnimation.toValue = [NSNumber numberWithFloat:0.0];
fadeOutAnimation.duration = 0.5;
fadeOutAnimation.delegate = self;
fadeOutAnimation.removedOnCompletion = NO;
[fadeOutAnimation setValue:layer forKey:@"parentLayer"];
[layer addAnimation:fadeOutAnimation forKey:@"opacity"];
[self.view.layer addSublayer:layer];
}
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
if(flag) {
CALayer *layer = [theAnimation valueForKey:@"parentLayer"];
if(layer) {
layer.opaque = NO;
layer.opacity = 0.0;
//layer.hidden = YES;
//NSLog(@"The layer object was: %@ (%@)", layer, [layer name]);
[layer removeFromSuperlayer];
[layer removeAllAnimations];
}
}
}
@end
¿cuál es tu problema? – Dev
+1 para "Esperar: ... real: ..." –