// 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.
#ifndef IOS_CHROME_BROWSER_SHARED_UI_ELEMENTS_CROSSFADE_LABEL_H_
#define IOS_CHROME_BROWSER_SHARED_UI_ELEMENTS_CROSSFADE_LABEL_H_
#import <UIKit/UIKit.h>
// Label that provides the ability to crossfade with an overlaid (nearly)
// identical label, to allow animating attributes that are not normally
// animatable (for example: textColor or even text attributes like
// strikethrough).
//
// Example usage:
// [crossfadeLabel setUpCrossfadeWithTextColor:greenColor
// attributedText:attributedTextForCrossfade];
// [UIView animateWithDuration:1.0
// animations:^{
// [crossfadeLabel crossfade];
// }
// completion:^(BOOL finished) {
// [crossfadeLabel cleanupAfterCrossfade];
// }];
//
@interface CrossfadeLabel : UILabel
// Creates a copy of this label and applies the given `textColor` and
// `attributedText` to the copy, and sets the alpha of the copy to 0. The copy
// is added to the superview to prepare for the crossfade.
- (void)setUpCrossfadeWithTextColor:(UIColor*)textColor
attributedText:(NSAttributedString*)attributedText;
// Changes the alpha of this label and its copy, in order to perform the
// crossfade. Should be called in the `animations` block of a UIView animation.
- (void)crossfade;
// Cleans up the copy used to perform the crossfade. Should be called in the
// completion block of a UIView animation.
- (void)cleanupAfterCrossfade;
@end
#endif // IOS_CHROME_BROWSER_SHARED_UI_ELEMENTS_CROSSFADE_LABEL_H_