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

Objective c UIProgressView和自定义跟踪和进度图像(iOS 5属性),objective-c,cocoa-touch,ios5,uiprogressview,Objective C,Cocoa Touch,Ios5,Uiprogressview,我正在iOS 5中试验一些关于UIProgressView的新属性。它们是: @property(非原子,保留)UIImage*progressImage @property(非原子,保留)UIImage*trackImage 这些新特性可以自定义“进度”和“轨迹”图像,这样您就可以制作出精美的进度条,而无需自己滚动 然而,我无法理解苹果是如何“延伸”进度图像的,因为文档有点松散/或者有一些我不知道的标准不管怎样,我想问是否有人能帮助我了解如何取得适当的进展和跟踪图像。 当我加载自定义图像时,无

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

@property(非原子,保留)UIImage*progressImage
@property(非原子,保留)UIImage*trackImage

这些新特性可以自定义“进度”和“轨迹”图像,这样您就可以制作出精美的进度条,而无需自己滚动

然而,我无法理解苹果是如何“延伸”进度图像的,因为文档有点松散/或者有一些我不知道的标准不管怎样,我想问是否有人能帮助我了解如何取得适当的进展和跟踪图像。

当我加载自定义图像时,无论尝试何种大小,都会得到如下结果:

我的测量结果如下:

  • UIProgressView长度:226个单位
  • trackingImage.png:10px
  • progressImage.png:7px
最后,这里是我的自定义图像:

progressImage.png


trackImage.png

下面是发生的事情:

您提供给
UIProgressView
的图像基本上被推入
UIImageView
,而
UIImageView
正在拉伸图像以填充空间

如果您只是这样做:

[progressView setTrackImage:[UIImage imageNamed:@"track.png"]];
然后你会得到奇怪的结果,因为它试图拉伸一个10px宽的图像来填充(例如)一个100px宽的图像视图。这意味着(大致上)图像中的每个像素将重复10次。因此,如果我们图像中的像素是:

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

000000000011111111112222222222333333333344444444445555555555...
这就是发生在你身上的事

你真正想要的是:

01234567812345678123456781234567812345678...123456789
换句话说,您希望图像有一个永远不会拉伸的左1点边缘,中心要平铺,还有一个永远不会拉伸的右1点边缘。要做到这一点:

如果您想让它也适当地垂直平铺,那么边插入应该是
{1,1,1,1}
(假设您想要1点边界)

progressImage
执行同样的操作,您将得到看起来正确的结果:

tl;博士:
您的图像需要调整大小。

根据仪器,这是泄漏。我用的是arc。还有其他人有同样的问题吗?看起来可能是UIProgressView的错误。出于某种原因,这只是使曲目图像的大小可调,而不是实际的进度图像,但我的设置方式都是一样的。@Seany242是的,您还需要使
progressImage
图像的大小可调。它们是相同的图像,只是颜色不同而已。我仔细检查并替换了setTrackImage:和setProgressImage:变量(加载和跟踪,两个uiimages从同一个图像以相同的方式设置),在这两种情况下,进度图像都不起作用,但轨迹图像起作用了@Seany242听起来像是一个新问题的好素材
UIImage *track = [[UIImage imageNamed:@"track"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 1)];
[progressView setTrackImage:track];