«Сложная» часть будет писать UIView
подкласс, который будет обрабатывать рисунок цвета. Вы хотите переопределить метод drawRect:
и выяснить, как узнать прогресс (или он будет просто «автоматически увеличивать»?) И нарисовать/заполнить на основе этого. Затем вы можете просто добавить UIView
в Interface Builder, изменить тип класса вида, размер его соответствующим образом и от вас!
«Легкий» часть является то, что если вы хотите, чтобы вид не будет видно, что вы можете сделать один из целого ряда вещей:
- Переместить вид офф-экрана, изменяя его свойства
frame
. (Это может быть «мгновенным» или анимированным.)
- Установите вид невидимым, изменив его свойство
hidden
. (Вы можете анимировать это тоже!)
- Избавьтесь от вида полностью, используя
[barView removeFromSuperview]
.
Update/Edit
Для фактического рисунка, попробуйте это (сделано быстро и не проверял, так 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 (это float с заданным диапазоном от 0.00 до 1.00) и позвоните по телефону [myView setNeedsDisplay]
. Это должно быть! ;-)
Дубликат вашего закрытого вопроса http://stackoverflow.com/questions/10426266/ios-colored-loading-bar – Abizern
Да, я знаю. На этот раз я просто хочу быть более ясным. Мне все еще нужен ответ на мой вопрос – alex