2011-06-03 20 views

Respuesta

30

Opción 1

float Y = 100; 
float X = 200; 

NSRect frame = [window frame]; 

frame.origin.y -= Y; 
frame.size.height += Y; 
frame.size.width += X; 

[window setFrame:frame display:YES animate:YES]; 

Opción 2

float Y = 100; 
float X = 200; 

NSRect frame = [window frame]; 

frame.origin.y -= Y; 
frame.size.height += Y; 
frame.size.width += X; 

NSDictionary *windowResize = @{ 
    NSViewAnimationTargetKey: window, 
    NSViewAnimationEndFrameKey: [NSValue valueWithRect:frame] 
}; 
NSDictionary *oldFadeOut = @{ 
    NSViewAnimationTargetKey: nil, 
    NSViewAnimationEffectKey: NSViewAnimationFadeOutEffect 
}; 
NSDictionary *newFadeIn = @{ 
    NSViewAnimationTargetKey: nil, 
    NSViewAnimationEffectKey: NSViewAnimationFadeInEffect 
}; 

NSArray *animations = @[arrayWithObjects:windowResize, newFadeIn, oldFadeOut]; 
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations: animations]; 

[animation setAnimationBlockingMode: NSAnimationBlocking]; 
[animation setAnimationCurve: NSAnimationEaseIn]; 
[animation setDuration: 2];  
[animation startAnimation]; 
+0

Hola Anne, gracias por el fragmento, pero con tu solución no tengo el agradable efecto de relajación, ¿tienes una idea? – kaal101

+0

Usar 'animate: YES' lo hace agradable y sin problemas. Por favor, aclare el _ "agradable efecto de relajación" _ que necesita. – Anne

+0

Lo que me refiero es el * Animation Pacing * que puede ver en esta [documentación] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Animation_Types_Timing/Articles/Timing.html) – kaal101

-4
[[NSWindow animator] setAlphaValue:0.0]; 

No se olvide de establecer el valor alfa a 1,0 cuando se quiere mostrar la ventana de nuevo.

+2

Eso ocultará la ventana. Además, debes ocultarlo (de verdad) cuando hayas terminado con la animación de opacidad mediante 'setHidden: YES'. Pero eso no está relacionado en absoluto con el cambio de tamaño de la ventana? – Jay

Cuestiones relacionadas