使用图像创build自定义进度栏

几乎我所要做的是创build以下图像: 在这里输入图像说明

所以这是一个进度条,它将显示客户在该选项中得到多less票。 我怎样才能做到这一点? 我想知道如果我可以使用一个面具(就像我在flex中那样),但是我在网上发现的所有的遮罩实现都是为UIImage做掩码,而不是为UIImageView做掩码。 我不能在UIImage做掩码,因为这两个图像具有相同的尺寸。 我必须使用图像的X和Y来裁剪它们? 那么,有什么build议?

以下是我必须创build进度条的两个图像:

在这里输入图像说明在这里输入图像说明

干杯。

你想摆脱每个图像中间的所有相同的位。 然后做一些事情:

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

Grady Player的回答非常棒。 只是一个小logging,任何人使用这个。 我试图更新两个UIImageView的帧来更新“进度”。 我试图强制更新“setNeedsDisplay”,但无济于事。 (sizeToFit也造成了问题)。

无论如何,我想出了如何更新现有进度条的进度的唯一方法是用我的新维度调用“setFrame:CGRectMake”。