Cocoachina介绍Core Animation相关的内容也蛮久的了,这次为大家奉献一个简单点的小程序,但是相信你一定用得着:在程序启动时,使用窗口淡入特效将窗口显示出来;在程序关闭或者窗口关闭时,使用窗口淡出效果将窗口隐藏。
当然,使用这个例子的特效的前提是你的程序是专门为Leopard开发的,如果想在Tiger实现,可能要麻烦点,因为例子中我们使用Core Animation去实现这个特效。
由于这个例子非常简单,而且比较实用,很适合初学者阅读,看看怎么做的然后在你自己的程序中加入这种很酷的效果吧。
这是一个cocoachina.com提供的教学,和往常的教学一样,我们首先在XCode中建立一个Cocoa工程,打开Interface Builder,拽进去一个Object,在Class里改名为AppController,然后在下面的Outlet里点加号,添加一个叫做window的outlet。然后选择File菜单,Write Class…保存为AppController.m和AppController.h。
切回XCode,修改一下AppController.h,让它看起来是这样的:
#import <Cocoa/Cocoa.h>
#import <QuartzCore/CoreAnimation.h>
@interface AppController : NSObject {
IBOutlet NSWindow * window;
BOOL shuttingDown;
}
@property (retain) NSWindow * window;
@property BOOL shuttingDown;
@end



self.window.alphaValue = 0.0;
[self.window.animator setAlphaValue:1.0];
接着我们该考虑窗口关闭时的情况,由于我们的AppController是window的delegate,所以我们可以接收到这个消息:
- (BOOL)windowShouldClose:(id)sender
{
[self.window.animator setAlphaValue:0.0];
return NO;
}
这里有一个问题,就是其实淡出动画结束时,窗口是没有真正关掉的。要想真正关掉,我们就需要再做点事情,我们需要在awakeFromNib的时候,建立一个CAAnimation的实例:
CAAnimation *anim = [CABasicAnimation animation];
[anim setDelegate:self];
[self.window setAnimations:[NSDictionary dictionaryWithObject:anim forKey:@"alphaValue"]];
将这个anim托管给自己,我们就可以接收到下面这个消息:
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag
这样,在动画结束的时候我们就可以手动将窗口关闭了:
[self.window close];
在程序关闭的时候,窗口虽然关掉了,但是我们是不会接收到windowShouldClose:消息的,这时候我们必须处理这个消息:
- (NSApplicationTerminateReply) applicationShouldTerminate:(NSNotification *)notification
这样,无论在窗口关闭或是程序退出的时候,你都可以给你的Leopard程序这种酷酷的效果了,最关键的是,这一点都不复杂。
你可以下载本文这个例子的源程序,记得要用XCode 3.0以上打开,在Leopard中使用。
2 Responses for "新手Core Animation教学:窗口淡入淡出特效"
Good job !keep going on !
请问,为什么CALayer的h文件里面,
- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key;
是不是把一个CAAnimation的对象复制到CALayer里面去类了,如果CALayer里面已经有这个对象,怎么找不到一个函数可以运行它阿??
发表评论