Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Threema/Threema/Onboarding/   (Social Medium ©)  Datei vom 26.9.2026 mit Größe 4 kB image not shown  

Quelle  ProgressLabel.m   Sprache: Unknown

 

Spracherkennung für: .m vermutete Sprache: Lisp {Lisp[38] Masm[38] ABAP[24]} [Methode: maximale Elemente, drei Dimensionen]

#import "ProgressLabel.h"
#import "BundleUtil.h"

#define ACTIVITY_INDICATOR_PADDING 6.0
#define NUMBER_OF_LINES 2

@interface ProgressLabel ()

@property UIActivityIndicatorView *activityIndicatior;
@property UILabel *label;
@property UIImageView *statusView;

@end

@implementation ProgressLabel

- (void)awakeFromNib {
    [super awakeFromNib];
    [self setup];
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    
    return self;
}

- (void)setup {
    _activityIndicatior = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium];
    _activityIndicatior.color = UIColor.whiteColor;
    _activityIndicatior.hidden = YES;
    
    _activityIndicatior.frame = [self rect:_activityIndicatior.frame centerVerticalIn:self.bounds round:YES];
    [self addSubview:_activityIndicatior];
    
    _label = [[UILabel alloc] initWithFrame:self.bounds];
    _label.numberOfLines = NUMBER_OF_LINES;
    [self addSubview:_label];
}

- (void)setText:(NSString *)text {
    [_label setText:text];
}

- (NSString *)text {
    return _label.text;
}

- (void)hideActivityIndicator {
    _label.frame = self.bounds;

    [_activityIndicatior stopAnimating];
    _activityIndicatior.alpha = 0.0;
}

- (void)showActivityIndicator {
    CGFloat maxX = CGRectGetMaxX(_activityIndicatior.frame) + ACTIVITY_INDICATOR_PADDING;
    CGRect labelFrame = CGRectMake(self.bounds.origin.x + maxX, self.bounds.origin.y, self.bounds.size.width - maxX, self.bounds.size.height);
    _label.frame = labelFrame;
    
    [_activityIndicatior startAnimating];
    _activityIndicatior.alpha = 1.0;
}

- (void)showErrorMessage:(NSString *)errorMessage {
    if ([NSThread isMainThread]) {
        [self setStatusImage:@"exclamationmark.circle.fill"];
        _label.text = errorMessage;
    }
    else {
        dispatch_sync(dispatch_get_main_queue(), ^{
            [self setStatusImage:@"exclamationmark.circle.fill"];
            _label.text = errorMessage;
        });
    }
}

- (void)showSuccessMessage:(NSString *)successMessage {
    if ([NSThread isMainThread]) {
        [self setStatusImage:@"checkmark.circle.fill"];
        _label.text = successMessage;
    }
    else {
        dispatch_sync(dispatch_get_main_queue(), ^{
            [self setStatusImage:@"checkmark.circle.fill"];
            _label.text = successMessage;
        });
    }
}

- (void)setStatusImage:(NSString *)imageName {
    UIImage *image = [UIImage systemImageNamed:imageName];
    if (image == nil) {
        image = [BundleUtil imageNamed:imageName];
    }
    if ([imageName isEqualToString:@"checkmark.circle.fill"]) {
        UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPaletteColors:@[UIColor.whiteColor, UIColor.systemGreenColor]];
        image = [UIImage systemImageNamed:imageName withConfiguration:config];
    }
    else if ([imageName isEqualToString:@"exclamationmark.circle.fill"]) {
        UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPaletteColors:@[UIColor.whiteColor, UIColor.systemRedColor]];
        image = [UIImage systemImageNamed:imageName withConfiguration:config];
    }
    if (_statusView == nil) {
        _statusView = [[UIImageView alloc] initWithImage:image];
        _statusView.frame = [self growRect:_activityIndicatior.frame byDx:-6.0 byDy:-6.0];
        [self addSubview:_statusView];
    } else {
        _statusView.image = image;
    }
            
    if (CGRectIntersectsRect(_label.frame, _statusView.frame)) {
        CGFloat maxX = CGRectGetMaxX(_statusView.frame) + ACTIVITY_INDICATOR_PADDING;
        CGRect labelFrame = CGRectMake(self.bounds.origin.x + maxX, self.bounds.origin.y, self.bounds.size.width - maxX, self.bounds.size.height);
        _label.frame = labelFrame;
    }
    
    _activityIndicatior.hidden = YES;
}

- (void)setFont:(UIFont *)font {
    _label.font = font;
}

- (UIFont *)font {
    return _label.font;
}

- (void)setTextColor:(UIColor *)textColor {
    _label.textColor = textColor;
}

- (UIColor *)textColor {
    return _label.textColor;
}

- (void)setNumberOfLines:(NSInteger)numberOfLines {
    _label.numberOfLines = numberOfLines;
}

- (NSInteger)numberOfLines {
    return _label.numberOfLines;
}

#pragma mark - RectUtil

- (CGRect)rect:(CGRect)rect centerVerticalIn:(CGRect)outerRect round:(BOOL)round {
    CGFloat innerHeight = rect.size.height;
    CGFloat outerHeight = outerRect.size.height;
    
    CGFloat x = rect.origin.x;
    CGFloat y = (outerHeight - innerHeight) / 2.0;
    if (round)
        y = roundf(y);
    
    return CGRectMake(x, y, rect.size.width, rect.size.height);
}

- (CGRect)growRect:(CGRect)rect byDx:(CGFloat)dX byDy:(CGFloat)dY{
    CGFloat x = rect.origin.x - dX / 2.0;
    CGFloat y = rect.origin.y - dY / 2.0;
    CGFloat width = rect.size.width + dX;
    CGFloat height = rect.size.height + dY;
    
    return CGRectMake(x, y, width, height);
}

@end

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.