зеркало из https://github.com/github/Rebel.git
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:
Родитель
0e22d2a55d
Коммит
153f2a59ba
|
@ -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();
|
||||
});
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче