Создание пользовательского индикатора выполнения с изображениями - PullRequest
3 голосов
/ 13 мая 2011

В значительной степени я пытаюсь создать следующее изображение: enter image description here

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

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

enter image description here enter image description here

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

Ответы [ 2 ]

11 голосов
/ 13 мая 2011

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

- (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

0 голосов
/ 11 июня 2011

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

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

...