// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/shared/ui/elements/crossfade_label.h"
#import "base/check.h"
@implementation CrossfadeLabel {
// The label that will be overlayed on top in order to perform the crossfade.
UILabel* _overlay;
}
- (void)setUpCrossfadeWithTextColor:(UIColor*)textColor
attributedText:(NSAttributedString*)attributedText {
CHECK(self.superview);
_overlay = [[UILabel alloc] initWithFrame:self.frame];
// Copy over various attributes, so that the overlay will render the same as
// this label.
_overlay.font = self.font;
_overlay.numberOfLines = self.numberOfLines;
_overlay.lineBreakMode = self.lineBreakMode;
// Set the modified properties, if given.
_overlay.attributedText =
attributedText ? attributedText : self.attributedText;
_overlay.textColor = textColor ? textColor : self.textColor;
// Add the overlay to the superview in an initially hidden way.
_overlay.alpha = 0;
[self.superview addSubview:_overlay];
}
- (void)crossfade {
self.alpha = 0;
_overlay.alpha = 1;
}
- (void)cleanupAfterCrossfade {
// Copy over a few attributes that may have changed.
self.attributedText = _overlay.attributedText;
self.textColor = _overlay.textColor;
// Show this label again and remove the overlay.
self.alpha = 1;
[_overlay removeFromSuperview];
_overlay = nil;
}
@end