Solved problem by using NSAnimationContext along with [[self animator]setAlphaValue:], which let me run simultaneous animations and then execute a block on completion.
Documentation:
Working code:
// To avoid a strong reference cycle to self in block
__weak typeof(self)weakSelf = self;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration: myDuration];
[[weakSelf animator] setFrame:_initialRect display:YES];
// ... other animations
} completionHandler:^{
NSLog(@"done");
[[weakSelf overCastView] removeFromSuperview];
weakSelf.overCastView = nil;
}];