NSViewAnimation提供了NSView或NSWindow简易的动画效果,可以改变NSView或NSWindow的位置、大小并实现NSView或NSWindow的渐入、渐出效果。
1、初始化
- (id)initWithViewAnimations:(NSArray*)viewAnimations
NSViewAnimation的初始化需要一个包含字典对象的一个数组对象,其字典包含了4个键值对,如下表:
键值 | 需要传入的类型 | 意义 |
---|---|---|
NSViewAnimationTargetKey | 视图或窗口对象 | 实现动画效果的视图或窗口 |
NSViewAnimationStartFrameKey | NSRect对象 | 动画起始frame(位置与大小) |
NSViewAnimationEndFrameKey | NSRect对象 | 动画结束frame(位置与大小) |
NSViewAnimationEffectKey | NSString对象 | 淡入或淡出效果(可选) |
2、设置动画的持续时间
- (void)setDuration:(NSTimeInterval)duration
(不要被NSTimeInterval类型所吓到,实际上NSTimeInterval等同于double类型。)
3、播放动画
- (void)startAnimation
//实现NSView或NSWindow的移动
-(void)startAnimation:(id)animationTarget endPoint:(NSPoint)endPoint{
NSRect startFrame = [animationTarget frame];
NSRect endFrame = NSMakeRect(endPoint.x, endPoint.y, startFrame.size.width, startFrame.size.height);
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
animationTarget,NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect,NSViewAnimationEffectKey,
[NSValue valueWithRect:startFrame],NSViewAnimationStartFrameKey,
[NSValue valueWithRect:endFrame],NSViewAnimationEndFrameKey, nil];
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dictionary]];
animation.delegate = self;
animation.duration = 2;
//NSAnimationBlocking阻塞
//NSAnimationNonblocking异步不阻塞
//NSAnimationNonblockingThreaded线程不阻塞
[animation setAnimationBlockingMode:NSAnimationNonblocking];
[animation startAnimation];
}
https://github.com/gaoxiaodiao/mac_sample/tree/master/animationSample_1