2011-06-03 14 views
13

Güzel bir hareket hızı animasyon (EaseOut) ile bir NSWindow (ana) yeniden boyutlandırmaya çalışıyorum.Kolaylaştırma animasyon ile NSWindows yeniden boyutlandırma

[NSWindow animator]'u kullanabilirim ancak hareket hızı efektini eklemenin bir yolunu bulamadım.

Bunu yapmama yardımcı olabilecek bir fikir veya kod örneğiniz var mı?

cevap

30

Seçenek 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]; 

Seçenek 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

Merhaba Anne, kod parçacığı için teşekkürler, ancak çözümünüzle birlikte güzel bir gevşeme etkisine sahip değilim, bir fikrin var mı? – kaal101

+0

'anim: YES özelliğini kullanmak güzel ve pürüzsüz hale getirir. Lütfen ihtiyacınız olan "güzel hareket etkisi" ni açıklayınız. – Anne

+0

Bahsettiğim şey, * Animasyon Pacing * 'i bu [belgeler]' de görebilirsiniz (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Animation_Types_Timing/Articles/Timing.html) – kaal101

-4
[[NSWindow animator] setAlphaValue:0.0]; 
yeniden penceresini göstermek istediğinizde

1,0'a alfa değerini ayarlamak için unutmayın.

+2

Bu, pencereyi gizler. Ayrıca 'setHidden: YES' aracılığıyla opaklık animasyonu ile bittiğinde onu (gerçek için) gizlemelisiniz. Ama bu pencere yeniden boyutlandırma ile ilgili değil? – Jay

İlgili konular