NSViewAnimation的简介与使用

简介
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
