1

現在、独自のプロジェクトに取り組んでおり、カスタム ローディング コントロールを実装したいと考えています。それは、アプリ Amen で見つけることができるものとほぼ同じです。色付きのバーは、アプリがサーバーからコンテンツを読み込んでいるときにのみ表示されます。

どんなヒントでも大歓迎です。ありがとう。

より明確にするためにいくつかの画像を次に示します

4

1 に答える 1

1

「難しい」部分はUIView、色の描画を処理するサブクラスを作成することです。メソッドをオーバーライドdrawRect:して、進行状況を知る方法 (または単に「自動インクリメント」するかどうか) を理解し、それに基づいて描画/入力する必要があります。次に、Interface Builder に を追加しUIView、ビューのクラス タイプを変更し、適切なサイズに変更するだけです。

「簡単な」部分は、ビューを非表示にしたい場合、いくつかのことのいずれかを行うことができるということです:

  1. プロパティを変更して、ビューを画面外に移動しframeます。(これは「瞬間的」またはアニメーション化できます。)
  2. プロパティを変更して、ビューを非表示に設定しhiddenます。(これもアニメ化できます!)
  3. を使用してビューを完全に削除し[barView removeFromSuperview]ます。

更新/編集

実際の描画については、これを試してください(すぐに実行され、テストされていないため、YMMV):

//  ColorProgressBar.h
#import <UIKit/UIKit.h>
@interface ColorProgressBar : UIView {
    float colorWidth;
    float progressPercent;
    NSMutableArray *colors;
}
@property (assign, nonatomic) float colorWidth;
@property (assign, nonatomic) float progressPercent;
@property (strong, nonatomic) NSMutableArray *colors;
@end

//  ColorProgressBar.m
#import "ColorProgressBar.h"
@implementation ColorProgressBar
@synthesize colors;
@synthesize colorWidth;
@synthesize progressPercent;
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Make the color array to use (this is spelled out for clarity)
        [self setColors:[NSMutableArray array]];
        [[self colors] addObject:[UIColor redColor]];
        [[self colors] addObject:[UIColor orangeColor]];
        [[self colors] addObject:[UIColor yellowColor]];
        [[self colors] addObject:[UIColor greenColor]];
        [[self colors] addObject:[UIColor blueColor]];
        [[self colors] addObject:[UIColor purpleColor]];
    }
    return self;
}
- (void)drawRect:(CGRect)rect {
    CGFloat left = 0;
    CGRect drawBox = CGRectZero;
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextClearRect(ctx, rect);
    int colorIndex = -1;
    // Draw each color block from left to right, switching to the next color each time
    do {
        colorIndex = colorIndex + 1;
        if (colorIndex >= [[self colors] count]) colorIndex = 0;
        [(UIColor *)[[self colors] objectAtIndex:colorIndex] setFill];
        drawBox = CGRectMake(left, 0, [self colorWidth], rect.size.height);
        CGContextFillRect(ctx, drawBox);
    } while (left < rect.size.width);
    // Figure out where the "faded/empty" part should start
    left = [self progressPercent] * rect.size.width;
    drawBox = CGRectMake(left, 0, rect.size.width - left, rect.size.height);
    [[UIColor colorWithWhite:1.0 alpha:0.5] setFill];
    CGContextFillRect(ctx, drawBox);
}
@end

このコードでは、この UIView サブクラスを使用でき、進行状況を更新するたびに、progressPercent (設計された範囲が 0.00 から 1.00 の浮動小数点数) を設定して を呼び出すだけ[myView setNeedsDisplay]です。それはそれである必要があります!;-)

于 2012-05-04T16:19:57.417 に答える