diff --git a/Rebel/CAAnimation+RBLBlockAdditions.h b/Rebel/CAAnimation+RBLBlockAdditions.h index 151438a..71b2dd8 100644 --- a/Rebel/CAAnimation+RBLBlockAdditions.h +++ b/Rebel/CAAnimation+RBLBlockAdditions.h @@ -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 diff --git a/Rebel/CAAnimation+RBLBlockAdditions.m b/Rebel/CAAnimation+RBLBlockAdditions.m index ae60236..e0bce00 100644 --- a/Rebel/CAAnimation+RBLBlockAdditions.m +++ b/Rebel/CAAnimation+RBLBlockAdditions.m @@ -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 diff --git a/Rebel/RBLPopover.m b/Rebel/RBLPopover.m index 597c85d..8a848ab 100644 --- a/Rebel/RBLPopover.m +++ b/Rebel/RBLPopover.m @@ -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); } } diff --git a/RebelTests/CAAnimation+RBLBlockAdditionsSpec.m b/RebelTests/CAAnimation+RBLBlockAdditionsSpec.m index 330411c..28910df 100644 --- a/RebelTests/CAAnimation+RBLBlockAdditionsSpec.m +++ b/RebelTests/CAAnimation+RBLBlockAdditionsSpec.m @@ -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(); });