Создание пользовательского индикатора выполнения с изображениями
Практически все, что я пытаюсь сделать, это создать следующее изображение:
Так что это индикатор выполнения, который покажет, сколько голосов клиент получит в этом варианте. Как я могу это сделать? Мне было интересно, могу ли я использовать маску (как в 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];
}
Ответ Грейди Плейера великолепен. Просто небольшая заметка, для тех, кто использует это. Я пытался обновить фреймы двух UIImageView, чтобы обновить "прогресс". Я пытался заставить обновление с помощью "setNeedsDisplay", но безрезультатно. (sizeToFit тоже вызывал проблемы).
В любом случае, единственный способ выяснить, как обновить прогресс существующего индикатора выполнения, - это вызвать setFrame:CGRectMake с моими новыми измерениями.