我正在尝试做的几乎是创建以下图像:
所以这是一个进度条,它将显示客户在该选项中获得多少票。我怎样才能做到这一点?我想知道我是否可以使用掩码(就像我在flex中那样),但我在网上找到的所有掩码实现都在为UIImage
s进行掩码,而不是UIImageView
。我无法在UIImage
中执行蒙版,因为这两个图像具有相同的尺寸。我必须使用图像的X和Y来裁剪它们?!那么,有什么建议吗?
以下是我必须创建进度条的两个图像:
干杯。
答案 0 :(得分:11)
你想摆脱每个图像中间的所有相同位。 然后做一些事情:
- (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];
}
答案 1 :(得分:0)
Grady Player的答案很棒。对于使用此功能的任何人来说,只是一个小笔记。我试图更新两个UIImageView的帧来更新“进度”。我试图用“setNeedsDisplay”强制更新,但无济于事。 (sizeToFit也引起了问题)。
无论如何,我想出如何更新现有进度条的进度的唯一方法是用我的新维度调用“setFrame:CGRectMake”。