NSViewAnimation执行的动画的选项有三个,分别是:NSAnimationBlocking(阻塞)、NSAnimationNonblocking(非阻塞)、NSAnimationNonblockingThreaded(把动画放到另外的线程中)。
苹果官方文档中,关于NSAnimationNonblockingThreaded的说明:
If the constant is NSAnimationNonblocking, the animation runs in the main thread in one of the standard run-loop modes or in a mode returned from
runLoopModesForAnimating. If animationBlockingMode is NSAnimationNonblockingThreaded, a new thread is spawned to run the animation.
实例:
NSRect firstViewFrame;
NSRect newViewFrame;
NSMutableDictionary* firstViewDict;
firstViewDict = [NSMutableDictionary dictionaryWithCapacity:3];
firstViewFrame = [fromView frame];
[firstViewDict setObject:fromView forKey:NSViewAnimationTargetKey];
[firstViewDict setObject:[NSValue valueWithRect:firstViewFrame] forKey:NSViewAnimationStartFrameKey];
newViewFrame = firstViewFrame;
newViewFrame.origin.x = self.frame.size.width;
[firstViewDict setObject:[NSValue valueWithRect:newViewFrame] forKey:NSViewAnimationEndFrameKey];
NSViewAnimation *_slideAnimation = [[NSViewAnimation alloc] init];
[_slideAnimation setDuration:0.5];
[_slideAnimation setAnimationBlockingMode:NSAnimationNonblockingThreaded];
_slideAnimation.delegate = self;
[_slideAnimation setViewAnimations:[NSArray arrayWithObjects:firstViewDict, nil]];
[_slideAnimation startAnimation];
// 动画的回调
- (void)animationDidEnd:(NSAnimation*)animation {
[fromView removeFromSuperview];
}