Создание пользовательского индикатора выполнения с изображениями

Практически все, что я пытаюсь сделать, это создать следующее изображение:

Так что это индикатор выполнения, который покажет, сколько голосов клиент получит в этом варианте. Как я могу это сделать? Мне было интересно, могу ли я использовать маску (как в flex), но все реализации маскировки, которые я нашел в Интернете, делают маски для UIImageс, а не для UIImageView, Я не могу сделать маску в UIImageпотому что два изображения имеют одинаковые размеры. Я должен использовать X и Y изображений, чтобы обрезать их?! Итак, есть предложения?

Вот два изображения, которые я должен создать для этого индикатора выполнения:

Приветствия.

2 ответа

Решение

Вы хотите избавиться от одного и того же бита в середине каждого изображения. затем сделайте что-то вроде:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self addProgressBarInFrame:CGRectMake(20.f, 20.f, 280.f, 50.f) withProgress:.9f];
    [self addProgressBarInFrame:CGRectMake(20.f, 100.f, 200.f, 25.f) withProgress:.1f];
}

-(void)addProgressBarInFrame:(CGRect)frame withProgress:(CGFloat)progress
{
    float widthOfJaggedBit = 4.0f;
    UIImage * imageA= [[UIImage imageNamed:@"imageA"] stretchableImageWithLeftCapWidth:widthOfJaggedBit topCapHeight:0.0f];
    UIImage * imageB= [[UIImage imageNamed:@"imageB"] stretchableImageWithLeftCapWidth:widthOfJaggedBit topCapHeight:0.0f];
    UIView * progressBar = [[UIView alloc] initWithFrame:frame];
    progressBar.backgroundColor = [UIColor whiteColor];
    UIImageView * imageViewA = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, frame.size.width*progress, frame.size.height)];
    UIImageView * imageViewB = [[UIImageView alloc] initWithFrame:CGRectMake(frame.size.width*progress, 0.f, frame.size.width - (frame.size.width*progress), frame.size.height)];
    imageViewA.image = imageA;
    imageViewB.image = imageB;
   // imageViewA.contentStretch = CGRectMake(widthOfJaggedBit, 0, imageA.size.width - 2*widthOfJaggedBit, imageA.size.height) ;
   // imageViewB.contentStretch = CGRectMake(widthOfJaggedBit, 0, imageB.size.width - 2*widthOfJaggedBit, imageB.size.height) ;
    [self.view addSubview:progressBar];
    [progressBar addSubview:imageViewA];
    [progressBar addSubview:imageViewB];
}

imageAimageB

Ответ Грейди Плейера великолепен. Просто небольшая заметка, для тех, кто использует это. Я пытался обновить фреймы двух UIImageView, чтобы обновить "прогресс". Я пытался заставить обновление с помощью "setNeedsDisplay", но безрезультатно. (sizeToFit тоже вызывал проблемы).

В любом случае, единственный способ выяснить, как обновить прогресс существующего индикатора выполнения, - это вызвать setFrame:CGRectMake с моими новыми измерениями.

Другие вопросы по тегам