我正在尝试使用Interface Builder中的背景图像创建自定义按钮。该图像具有可伸缩和不可拉伸的部分,因此可以调整大小。
IB公开Stretching属性以允许这样做,但是我输入的值没有影响按钮的显示方式。它总是被完全拉伸以填充框架的大小。
这可能是IB或UIButton中不支持的功能吗?
http://img.skitch.com/20100103-rjabkq2c2jkqynw47crxepdtwb.jpg
(注意:上面的拉伸值不适合图像正常使用,但只是我在屏幕截图时弄乱的值)
答案 0 :(得分:2)
在开始iPhone 3开发的示例中,仅使用 UIImage leftCapWidth 和 topCapHeight ,并以编程方式创建/设置图像,如果contentStretch不起作用,那么这是另一种方法。
答案 1 :(得分:0)
如果您希望拉伸多个像素(即按钮中心的图案),则可伸缩的UIImage不起作用。
UIButton的contentStretch也无法正常工作。
我是如何解决的:我将UIButton子类化并添加了UIImageView *backgroundImageView
作为属性,并将其作为UIButton
内的子视图放在索引0处。然后我在layoutSubviews中确保它完全适合按钮并设置imageView的突出显示状态。您需要做的就是使用正确的contentStretch和contentMode切换UIImageView。
.h文件
@interface ButtonWithBackgroundImage : UIButton {
UIImageView *backgroundImageView;
}
@property (retain) UIImageView *backgroundImageView;
+ (ButtonWithBackgroundImage*)button;
@end
.m文件
@implementation ButtonWithBackgroundImage
@synthesize backgroundImageView;
+ (ButtonWithBackgroundImage*)button {
return [self buttonWithType:UIButtonTypeCustom];
}
- (void)setBackgroundImageView:(UIImageView*)img {
[backgroundImageView removeFromSuperview];
[backgroundImageView release];
backgroundImageView = [img retain];
if(backgroundImageView){
[self insertSubview:backgroundImageView atIndex:0];
[self setNeedsLayout];
}
}
- (void)setSelected:(BOOL)select {
[super setSelected:select];
// we subclass the setSelect method to highlight the background imageview
[backgroundImageView setHighlighted:select||self.highlighted];
}
- (void)setHighlighted:(BOOL)highl {
[super setHighlighted:highl];
// we subclass the setHighlighted method to highlight the background imageview
[backgroundImageView setHighlighted:highl||self.selected];
}
- (void)layoutSubviews {
[super layoutSubviews];
self.backgroundImageView.frame = self.bounds;
}
- (void)dealloc {
[backgroundImageView release];
backgroundImageView = nil;
[super dealloc];
}
@end
答案 2 :(得分:0)
按钮的背景图像将始终调整大小以填充框架;前景图像不会调整大小(如果没有文本,则居中)。伸展的逻辑是它调整中间的大小,同时保持边界完整;例如,对于圆角矩形,这意味着圆角不会扭曲。
答案 3 :(得分:0)
使用Xcode切片功能指定图像可调整大小的中心区域的尺寸,并可选择指定端盖,这是图像中不应由可调整大小区域填充的区域。 见About Asset Catalogs
答案 4 :(得分:-1)
我有它的工作!对我来说,神奇的价值是0.2和0.2。
我的图片是一个盒子内的盒子,都有圆角。
当它为0.2和0.8时,它会使图像顶部未拉伸,但底部会拉伸并扭曲。
我猜,第一个0.2是偏移意味着多少不伸展,第二个可能是拉伸多少。至少,0.2和0.6也有效。
原则上,您可以进行实验:拍摄格子或同心圆或颜色渐变的图像并拉伸它。如果你这样做,请发布图片:)。