2012-05-04 2 views
1

В настоящее время я работаю над собственным проектом, и я хотел бы реализовать пользовательский элемент управления загрузкой. Это в значительной степени то, что вы можете найти в приложении Amen. Цветная полоса появляется только тогда, когда приложение загружает контент с сервера.ios bar, который меняет цвета при загрузке

Любые советы будут высоко оценены. Благодарю.

Here are some images to make it more clear

+0

Дубликат вашего закрытого вопроса http://stackoverflow.com/questions/10426266/ios-colored-loading-bar – Abizern

+0

Да, я знаю. На этот раз я просто хочу быть более ясным. Мне все еще нужен ответ на мой вопрос – alex

ответ

1

«Сложная» часть будет писать UIView подкласс, который будет обрабатывать рисунок цвета. Вы хотите переопределить метод drawRect: и выяснить, как узнать прогресс (или он будет просто «автоматически увеличивать»?) И нарисовать/заполнить на основе этого. Затем вы можете просто добавить UIView в Interface Builder, изменить тип класса вида, размер его соответствующим образом и от вас!

«Легкий» часть является то, что если вы хотите, чтобы вид не будет видно, что вы можете сделать один из целого ряда вещей:

  1. Переместить вид офф-экрана, изменяя его свойства frame. (Это может быть «мгновенным» или анимированным.)
  2. Установите вид невидимым, изменив его свойство hidden. (Вы можете анимировать это тоже!)
  3. Избавьтесь от вида полностью, используя [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]. Это должно быть! ;-)

+0

спасибо за ваш ответ. Я думаю, что это хорошая отправная точка. панель будет заполняться (увеличиваться) в зависимости от того, сколько вы вытягиваете просмотр прокрутки до определенного момента, когда он только начинает переходить в режим загрузки, а затем полностью заряжен. любые другие советы по-прежнему приветствуются – alex

+0

Если вы действительно любите это, не могли бы вы также его проголосовать? ;-) – mbm29414

+0

как только у меня будет достаточно очков репутации, я проголосую за ваш ответ. еще раз спасибо. :) – alex

Смежные вопросы