Estoy tratando de deslizar en un NSView
usando animación central. Creo que necesito usar animación explícita en lugar de confiar en algo como [[view animator] setFrame:newFrame]
. Esto se debe principalmente a que necesito configurar el delegado de animación para que actúe después de que la animación haya finalizado.Animación explícita de NSView usando animación central
Lo tengo funcionando bien usando el animador, pero como dije, necesito que me avisen cuando termine la animación. Mi código es actualmente como:
// Animate the controlView
NSRect viewRect = [controlView frame];
NSPoint startingPoint = viewRect.origin;
NSPoint endingPoint = startingPoint;
endingPoint.x += viewRect.size.width;
[[controlView layer] setPosition:NSPointToCGPoint(endingPoint)];
CABasicAnimation *controlPosAnim = [CABasicAnimation animationWithKeyPath:@"position"];
[controlPosAnim setFromValue:[NSValue valueWithPoint:startingPoint]];
[controlPosAnim setToValue:[NSValue valueWithPoint:endingPoint]];
[controlPosAnim setDelegate:self];
[[controlView layer] addAnimation:controlPosAnim forKey:@"controlViewPosition"];
Esto funciona visualmente (y me notifican al final) pero parece que la ControlView real no consigue mover. Si hago que la ventana se actualice, el controlView desaparece. He intentado reemplazar
[[controlView layer] setPosition:NSPointToCGPoint(endingPoint)];
con
[controlView setFrame:newFrame];
y que tenga como consecuencia la vista (y capa) para moverse, pero es algo corromper de tal manera que mi aplicación muere con una falla seg poco después.
La mayoría de los ejemplos de animación explícita parecen moverse solo a CALayer
. Debe haber una forma de mover el NSView
y también poder establecer un delegado. Cualquier ayuda sería apreciada.
Gracias por la respuesta. Logré que esto funcionara con una pequeña reorganización del código. Creo que los ejemplos de Apple durante WWDC te dijeron que manipules la vista * antes * de configurar la animación. Entonces, ¿cómo puedes usar delegados con animator? He buscado por todas partes ejemplos de eso y salió vacío. También vi numerosos mensajes que decían que no era posible. – btschumy
Establezca el delegado en su controlPosAnim, agréguelo a las animaciones de controlView, se invocarán los métodos de delegado. –
OK gracias por la información – btschumy