Ответ 1
Я написал небольшой класс, который использует блоки для выполнения по существу того же самого, что и выше, при использовании прокси-сервера аниматора в OSX.
Обратите внимание, что этот класс не является потокобезопасным и не претерпел каких-либо конкретных или стрессовых тестов.
//Interface
@interface MZAnimator : NSObject{}
+ (void)animateWithDuration:(NSTimeInterval)duration
animation:(void (^)(void))animationBlock;
+ (void)animateWithDuration:(NSTimeInterval)duration
animation:(void (^)(void))animationBlock
completion:(void (^)(void))completionBlock;
@end
//Implementation
@interface MZAnimator ()
+ (void)runEndBlock:(void (^)(void))completionBlock;
@end
@implementation MZAnimator
+ (void)animateWithDuration:(NSTimeInterval)duration
animation:(void (^)(void))animationBlock
{
[self animateWithDuration:duration animation:animationBlock completion:nil];
}
+ (void)animateWithDuration:(NSTimeInterval)duration
animation:(void (^)(void))animationBlock
completion:(void (^)(void))completionBlock
{
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:duration];
animationBlock();
[NSAnimationContext endGrouping];
if(completionBlock)
{
id completionBlockCopy = [[completionBlock copy] autorelease];
[self performSelector:@selector(runEndBlock:) withObject:completionBlockCopy afterDelay:duration];
}
}
+ (void)runEndBlock:(void (^)(void))completionBlock
{
completionBlock();
}
@end