2011-04-23 96 views
4

我有一个UIButton指定宽度为200.其autoresizingMask属性设置为UIViewAutoresizingFlexibleWidth。 A UIImage应用于此按钮的backgroundImage属性。此UIimage定义如下:UIButton backgroundImage stretchableImageWithLeftCapWidth:topCapHeight问题

[[UIImage imageNamed:@"buttonimage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0] 

buttonimage.png具有400像素的宽度(按钮的2倍的宽度,因为视网膜分辨率的),代表了圆角矩形。在肖像模式下,一切都很好。只要用户旋转设备并且iPhone进入横向模式,UIButton就会拉伸。由于此行为,图像的左侧圆角边框保持不变(stretchableImageWithLeftCapWidth:),但右侧边角也拉伸。是否有我忘记设置的属性,确保只有一个指定的像素(例如第十个像素)被拉伸,而其他任何像素都保留了它的尺寸?

在此先感谢!

编辑:如果我使用较小的图像,这已经拉伸到肖像模式,这两个边界似乎被扩大。

解决! 如果你的形象被称为“myImage.png”,它是视网膜的版本,只是把它称为“[email protected]

+1

您应该在非视网膜大小中提供'buttonimage.png',并在视网膜大小中提供第二个版本名字'buttonimage @ 2x.png'。也许这解决了你的问题。 – 2011-04-23 19:41:54

+0

这种行为在非视网膜和视网膜分辨率支持设备上都会出现。如果我正确理解这一点,那么[email protected]文件是唯一可以通过视网膜分辨率设备访问的文件,所以这没有什么区别。如我错了请纠正我。 – fscheidl 2011-04-23 19:46:00

+1

没错。我已经尝试了一个简单的例子,并且有一个有趣的效果,当我将左帽设置为像3px这样的小量时,它会沿着整个按钮对此部分进行涂抹,其余部分正确绘制为与右侧对齐。景观看起来一样。我的按钮图像是50x50,当我将左帽设置为21px时,它恰好在圆角后面,即使在风景中也看起来很好。也许一些尝试和错误会做? – 2011-04-23 20:02:28

回答

5

有我忘了把 任何财产,以确保只有一个指定的像素 (例如第十个)被拉伸,而其他任何东西都保留了它的尺寸?

不是真的,但考虑到图像的大小,您应该重新阅读leftCapWidth属性。

可伸缩图像的工作方式是:您提供左帽,下一个像素被拉伸,并且图像的右侧与width = (total width - left cap + 1)保持相同。假设您将左帽设置为10,并且原始图片为400,那么您告诉iOS右图中右侧不可伸展的右侧是400-10-1=389px。垂直同样适用。检查是否在普通设备上使用了@ 2x图像,而其名称上没有@ 2x,或者如果2x版本没有像素的两倍,或者有大写/小写差异。你可以找到这个nslogging的图像大小加载。

我不知道为什么图像的右侧被拉伸。假设你有height=0,如果按钮高度改变,整个图像可以垂直拉伸,但这不太可能会导致只有右侧失真。

+0

我现在添加了我的按钮的非视网膜版本,并突然它的工作。你引导我走向正确的道路。 – fscheidl 2011-04-23 20:50:42

2

就我所知,代码没有任何问题,应该是导致图像的右侧被裁剪。以下是我使用的确切代码,我知道这些代码的作用,以产生您正在寻找的相同效果。

UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 245, 51)]; 
button.autoresizingMask=UIViewAutoresizingFlexibleWidth; 
[button setBackgroundImage:[[UIImage imageNamed:@"userbubble.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:0] forState:UIControlStateNormal]; 
[self.view addSubview:button]; 

我的猜测是问题来自您正在使用的PNG,或者可能来自项目中的压缩PNG文件设置。此外,由于您使用的图像非常大,因此请尝试将左帽进一步放大,比如说40或50像素英寸。

+0

这是我使用的确切代码。我只是尝试了一个较小的图像,奇怪的是,两个边界稍微拉伸。 (在横向和纵向模式下) – fscheidl 2011-04-23 20:22:11

+1

尝试给自己一个更大的左帽(比如图像的50%),如果事情看起来很奇怪,请检查应用程序目标和项目设置下的压缩PNG文件设置。把它关掉,看看是否有所作为。 – Sam 2011-04-23 20:30:11

+0

试了两种选择。仍然没有区别。我上传了我的buttonimage。也许你发现你的userbubble.png和我的图像有什么不同。 (笑) – fscheidl 2011-04-23 20:34:48