I am experimenting with some new properties in iOS 5 regarding UIProgressView. They are:
@property(nonatomic, retain) UIImage *progressImage;
@property(nonatomic, retain) UIImage *trackImage;
These new properties enable the customisation of the “progress” and the “track” image, so that you can make fancy progress bars without having to roll-your-own.
I however cannot understand how Apple “stretches” the progress images, because documentation is a little flakey / OR there is some standard I am not aware of. Regardless, I am asking if someone can help me understand how to make appropriate progress and tracking images.
I get results like this when I load my custom images, no matter which sizes I try:

My measurements are as follows:
- UIProgressView length: 226 units
- trackingImage.png: 10px
- progressImage.png: 7px
Lastly, here are my custom images:
progressImage.png
trackImage.png
Here’s what’s going on:
The images you provide to the
UIProgressVieware basically being shoved in toUIImageViews, and theUIImageViewis stretching the image to fill the space.If you simply do:
Then you’re going to get weird results, because it’s trying to stretch a 10px wide image to fill (for example) a 100px wide image view. This means (roughly) that every pixel in the image will be repeated 10 times. So if the pixels in our image were:
Then putting that image straight into a 100px wide image view would stretch it something like this:
This is what’s happening to you.
What you really want to have happen is this:
In other words, you want the image to have a 1 point left edge that is never stretched, the center to be tiled, and to have a 1 point right edge that is also never stretched. To do this, you’ll need to make the image resizable:
If you want this to tile appropriately vertically as well, then the edge insets should be
{1, 1, 1, 1}(assuming you want a 1 point border).Do the same to the
progressImage, and you’ll end up with something that looks correct:tl;dr:
Your images need to be resizable.