UIProgressView和自定义跟踪和进度图像(iOS 5属性)

时间:2011-11-02 13:10:41

标签: objective-c cocoa-touch ios5 uiprogressview

我正在试验iOS 5中关于UIProgressView的一些新属性。他们是:

@property(nonatomic, retain) UIImage *progressImage;
@property(nonatomic, retain) UIImage *trackImage;

这些新属性可以自定义“进度”和“曲目”图像,这样您就可以制作精美的进度条而无需滚动 - 自己的。

但我无法理解Apple“如何延伸”进度图像,因为文档有点夸张/或者有一些我不知道的标准。 无论如何,我在问是否有人可以帮助我了解如何取得适当进展和跟踪图片。

当我加载自定义图片时,无论我尝试哪种尺寸,我都会得到这样的结果:

Progress Example

我的测量结果如下:

  • UIProgressView长度:226个单位
  • trackingImage.png:10px
  • progressImage.png:7px

最后,这是我的自定义图片:

The Progress Image progressImage.png

The Tracking Image trackImage.png

1 个答案:

答案 0 :(得分:109)

这是发生了什么:

您提供给UIProgressView的图片基本上被推入UIImageViewsUIImageView正在拉伸图片以填充空间。

如果您只是这样做:

[progressView setTrackImage:[UIImage imageNamed:@"track.png"]];

然后你会得到奇怪的结果,因为它试图拉伸10px宽的图像来填充(例如)100px宽的图像视图。这意味着(大致)图像中的每个像素将重复10次。因此,如果我们的图像中的像素是:

0123456789

然后将该图像直接放入100px宽的图像视图中会将其拉伸如下:

000000000011111111112222222222333333333344444444445555555555...

这就是你发生的事情。

你真正想要发生的事情是:

01234567812345678123456781234567812345678...123456789

换句话说,您希望图像具有从未拉伸的1点左边缘,要平铺的中心,以及也从不拉伸的1点右边缘。为此,you'll need to make the image resizable

UIImage *track = [[UIImage imageNamed:@"track"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 1)];
[progressView setTrackImage:track];

如果你想让它垂直适当地平铺,那么边缘插入应该是{1, 1, 1, 1}(假设你想要一个1点边框)。

progressImage做同样的事情,你会得到一些看起来正确的东西:

Correct progressView

TL; DR:

您的图片需要调整大小。