extract method for animations.
This commit is contained in:
parent
4986bb09a9
commit
cba21e3b44
@ -298,58 +298,64 @@
|
|||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
MVMCoreBlockOperation *operation = [MVMCoreBlockOperation blockOperationWithBlock:^(MVMCoreBlockOperation * _Nonnull operation) {
|
MVMCoreBlockOperation *operation = [MVMCoreBlockOperation blockOperationWithBlock:^(MVMCoreBlockOperation * _Nonnull operation) {
|
||||||
[MVMCoreDispatchUtility performBlockOnMainThread:^{
|
[MVMCoreDispatchUtility performBlockOnMainThread:^{
|
||||||
// Must notify animation delegate before animating.
|
[weakSelf performExpansion:animated onCompletion:^{
|
||||||
if (animated && weakSelf.animationDelegate) {
|
|
||||||
[weakSelf.animationDelegate topAlertViewBeginAnimation];
|
|
||||||
}
|
|
||||||
|
|
||||||
[weakSelf.viewToLayout layoutIfNeeded];
|
|
||||||
weakSelf.topLabelConstraintBottom.active = NO;
|
|
||||||
weakSelf.topConstraint.active = YES;
|
|
||||||
weakSelf.expanded = YES;
|
|
||||||
|
|
||||||
void(^animation)(void) = ^(void) {
|
|
||||||
weakSelf.buttonView.button.alpha = 1;
|
|
||||||
weakSelf.buttonView.label.alpha = 1;
|
|
||||||
if (weakSelf.onlyShowTopMessageWhenCollapsed) {
|
|
||||||
weakSelf.shortViewHeight.active = YES;
|
|
||||||
}
|
|
||||||
[weakSelf.viewToLayout layoutIfNeeded];
|
|
||||||
};
|
|
||||||
|
|
||||||
//accessibility - added to make only top alert label and close button accessible. Posted notification when top alert is displayed
|
|
||||||
weakSelf.accessibilityElements = @[weakSelf.buttonView];
|
|
||||||
weakSelf.shortView.isAccessibilityElement = NO;
|
|
||||||
|
|
||||||
void(^completion)(void) = ^(void) {
|
|
||||||
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, weakSelf.buttonView.label);
|
|
||||||
[operation markAsFinished];
|
[operation markAsFinished];
|
||||||
};
|
}];
|
||||||
if (animated) {
|
|
||||||
[UIView animateWithDuration:.5 animations:animation completion:^(BOOL finished) {
|
|
||||||
[weakSelf.viewToLayout layoutIfNeeded];
|
|
||||||
|
|
||||||
// Must notify animation delegate when animating finished.
|
|
||||||
[MVMCoreDispatchUtility performBlockInBackground:^{
|
|
||||||
if (weakSelf.animationDelegate) {
|
|
||||||
[weakSelf.animationDelegate topAlertViewFinishAnimation];
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
completion();
|
|
||||||
}];
|
|
||||||
} else {
|
|
||||||
animation();
|
|
||||||
completion();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collapse after 5 seconds (if the view still exists)
|
|
||||||
[weakSelf autoCollapse];
|
|
||||||
}];
|
}];
|
||||||
}];
|
}];
|
||||||
[[MVMCoreNavigationHandler sharedNavigationHandler] addNavigationOperation:operation];
|
[[MVMCoreNavigationHandler sharedNavigationHandler] addNavigationOperation:operation];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)performExpansion:(BOOL)animated onCompletion:(void(^)(void))completionHandler {
|
||||||
|
// Must notify animation delegate before animating.
|
||||||
|
if (animated && self.animationDelegate) {
|
||||||
|
[self.animationDelegate topAlertViewBeginAnimation];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
self.topLabelConstraintBottom.active = NO;
|
||||||
|
self.topConstraint.active = YES;
|
||||||
|
self.expanded = YES;
|
||||||
|
|
||||||
|
void(^animation)(void) = ^(void) {
|
||||||
|
self.buttonView.button.alpha = 1;
|
||||||
|
self.buttonView.label.alpha = 1;
|
||||||
|
if (self.onlyShowTopMessageWhenCollapsed) {
|
||||||
|
self.shortViewHeight.active = YES;
|
||||||
|
}
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
};
|
||||||
|
|
||||||
|
//accessibility - added to make only top alert label and close button accessible. Posted notification when top alert is displayed
|
||||||
|
self.accessibilityElements = @[self.buttonView];
|
||||||
|
self.shortView.isAccessibilityElement = NO;
|
||||||
|
|
||||||
|
void(^completion)(void) = ^(void) {
|
||||||
|
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.buttonView.label);
|
||||||
|
completionHandler();
|
||||||
|
};
|
||||||
|
if (animated) {
|
||||||
|
[UIView animateWithDuration:.5 animations:animation completion:^(BOOL finished) {
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
|
||||||
|
// Must notify animation delegate when animating finished.
|
||||||
|
[MVMCoreDispatchUtility performBlockInBackground:^{
|
||||||
|
if (self.animationDelegate) {
|
||||||
|
[self.animationDelegate topAlertViewFinishAnimation];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
completion();
|
||||||
|
}];
|
||||||
|
} else {
|
||||||
|
animation();
|
||||||
|
completion();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collapse after 5 seconds (if the view still exists)
|
||||||
|
[self autoCollapse];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)autoCollapse {
|
- (void)autoCollapse {
|
||||||
if (self.collapseAutomaticallyAfterExpanded) {
|
if (self.collapseAutomaticallyAfterExpanded) {
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
@ -379,34 +385,8 @@
|
|||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
MVMCoreBlockOperation *operation = [MVMCoreBlockOperation blockOperationWithBlock:^(MVMCoreBlockOperation * _Nonnull operation) {
|
MVMCoreBlockOperation *operation = [MVMCoreBlockOperation blockOperationWithBlock:^(MVMCoreBlockOperation * _Nonnull operation) {
|
||||||
[MVMCoreDispatchUtility performBlockOnMainThread:^{
|
[MVMCoreDispatchUtility performBlockOnMainThread:^{
|
||||||
// Must notify animation delegate before animating.
|
[weakSelf performCollapseAnimationThen:^{
|
||||||
if (weakSelf.animationDelegate) {
|
[operation markAsFinished];
|
||||||
[weakSelf.animationDelegate topAlertViewBeginAnimation];
|
|
||||||
}
|
|
||||||
[weakSelf.viewToLayout layoutIfNeeded];
|
|
||||||
weakSelf.topConstraint.active = NO;
|
|
||||||
weakSelf.topLabelConstraintBottom.active = YES;
|
|
||||||
weakSelf.expanded = NO;
|
|
||||||
[UIView animateWithDuration:.5 animations:^{
|
|
||||||
[weakSelf.viewToLayout layoutIfNeeded];
|
|
||||||
weakSelf.buttonView.button.alpha = 0;
|
|
||||||
weakSelf.buttonView.label.alpha = 0;
|
|
||||||
weakSelf.shortViewHeight.active = NO;
|
|
||||||
} completion:^(BOOL finished) {
|
|
||||||
typeof(self) strongSelf = weakSelf;
|
|
||||||
if (!strongSelf) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
[strongSelf.viewToLayout layoutIfNeeded];
|
|
||||||
strongSelf.accessibilityElements = @[strongSelf.shortView.label];
|
|
||||||
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
|
|
||||||
[MVMCoreDispatchUtility performBlockInBackground:^{
|
|
||||||
// Must notify animation delegate when animating finished.
|
|
||||||
if (weakSelf.animationDelegate) {
|
|
||||||
[weakSelf.animationDelegate topAlertViewFinishAnimation];
|
|
||||||
}
|
|
||||||
[operation markAsFinished];
|
|
||||||
}];
|
|
||||||
}];
|
}];
|
||||||
}];
|
}];
|
||||||
}];
|
}];
|
||||||
@ -414,6 +394,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)performCollapseAnimationThen:(void(^)(void))completionHandler {
|
||||||
|
// Must notify animation delegate before animating.
|
||||||
|
if (self.animationDelegate) {
|
||||||
|
[self.animationDelegate topAlertViewBeginAnimation];
|
||||||
|
}
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
self.topConstraint.active = NO;
|
||||||
|
self.topLabelConstraintBottom.active = YES;
|
||||||
|
self.expanded = NO;
|
||||||
|
[UIView animateWithDuration:.5 animations:^{
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
self.buttonView.button.alpha = 0;
|
||||||
|
self.buttonView.label.alpha = 0;
|
||||||
|
self.shortViewHeight.active = NO;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[self.viewToLayout layoutIfNeeded];
|
||||||
|
self.accessibilityElements = @[self.shortView.label];
|
||||||
|
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
|
||||||
|
// Must notify animation delegate when animating finished.
|
||||||
|
[MVMCoreDispatchUtility performBlockInBackground:^{
|
||||||
|
if (self.animationDelegate) {
|
||||||
|
[self.animationDelegate topAlertViewFinishAnimation];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
completionHandler();
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)accessibilityFocusChanged:(NSNotification *)notification {
|
- (void)accessibilityFocusChanged:(NSNotification *)notification {
|
||||||
if (![MVMCoreUIUtility viewContainsAccessiblityFocus:self]) {
|
if (![MVMCoreUIUtility viewContainsAccessiblityFocus:self]) {
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIAccessibilityElementFocusedNotification object:nil];
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIAccessibilityElementFocusedNotification object:nil];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user