Call the completion block whenver the animation is halted.

We now pass in the finished flag to the completion block, so it can
decide to take appropriate action.
This commit is contained in:
Danny Greg 2012-09-15 10:49:54 +01:00
Родитель 0e22d2a55d
Коммит 153f2a59ba
4 изменённых файлов: 12 добавлений и 11 удалений

Просмотреть файл

@ -11,8 +11,9 @@
@interface CAAnimation (RBLBlockAdditions)
// A block called on successful completion of the animation.
// This sets the delegate of the animation to be itself.
//
// This sets the delegate of the animation.
@property (nonatomic, copy) void (^rbl_completionBlock)(void);
// finished - Whether the animation had finished when it stopped.
@property (nonatomic, copy) void (^rbl_completionBlock)(BOOL finished);
@end

Просмотреть файл

@ -14,17 +14,17 @@ static void const *RBLCAAnimationCompletionBlockAssociatedObjectKey = @"RBLCAAni
@implementation CAAnimation (RBLBlockAdditions)
- (void)setRbl_completionBlock:(void(^)(void))block {
- (void)setRbl_completionBlock:(void(^)(BOOL))block {
self.delegate = self;
objc_setAssociatedObject(self, &RBLCAAnimationCompletionBlockAssociatedObjectKey, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (void(^)(void))rbl_completionBlock {
- (void(^)(BOOL))rbl_completionBlock {
return objc_getAssociatedObject(self, &RBLCAAnimationCompletionBlockAssociatedObjectKey);
}
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if (flag && self.rbl_completionBlock != nil) self.rbl_completionBlock();
if (self.rbl_completionBlock != nil) self.rbl_completionBlock(flag);
}
@end

Просмотреть файл

@ -228,7 +228,7 @@ static NSTimeInterval const RBLPopoverDefaultFadeDuration = 0.3;
[self.popoverWindow makeKeyAndOrderFront:self];
[backgroundView updateMaskLayer];
void (^postDisplayBlock)() = ^{
void (^postDisplayBlock)(BOOL) = ^(BOOL finished) {
self.animating = NO;
//[self.contentViewController viewDidAppear:YES];
@ -244,7 +244,7 @@ static NSTimeInterval const RBLPopoverDefaultFadeDuration = 0.3;
self.animating = YES;
[self.popoverWindow.animator setAlphaValue:1.0];
} else {
postDisplayBlock();
postDisplayBlock(YES);
}
}
@ -262,7 +262,7 @@ static NSTimeInterval const RBLPopoverDefaultFadeDuration = 0.3;
if (self.willCloseBlock != nil) self.willCloseBlock(self);
void (^windowTeardown)() = ^{
void (^windowTeardown)(BOOL) = ^(BOOL finished) {
[self.popoverWindow.parentWindow removeChildWindow:self.popoverWindow];
[self.popoverWindow close];
self.animating = NO;
@ -281,7 +281,7 @@ static NSTimeInterval const RBLPopoverDefaultFadeDuration = 0.3;
self.animating = YES;
[self.popoverWindow.animator setAlphaValue:0.0];
} else {
windowTeardown();
windowTeardown(YES);
}
}

Просмотреть файл

@ -10,7 +10,7 @@ SpecBegin(CAAnimationRBLBlockAdditions)
__block CAAnimation *animation = nil;
__block BOOL completionExecuted = NO;
__block void(^completionBlock)() = ^ {
__block void(^completionBlock)(BOOL) = ^ (BOOL finished) {
completionExecuted = YES;
};
@ -24,7 +24,7 @@ before(^{
it(@"Should have set a completion block", ^ {
expect(animation.rbl_completionBlock).toNot.beNil();
expect(animation.rbl_completionBlock).to.equal(completionBlock);
if (animation.rbl_completionBlock != nil) animation.rbl_completionBlock();
if (animation.rbl_completionBlock != nil) animation.rbl_completionBlock(YES);
expect(completionExecuted).to.beTruthy();
});