如何在“界面”构建器中设置stretchableImageWithLeftCapWidth?

时间:2010-04-13 20:14:05

标签: iphone interface-builder

如何在“界面构建器”中设置stretchableImageWithLeftCapWidth?

5 个答案:

答案 0 :(得分:9)

“界面”构建器不支持可伸缩图像。

-(void) viewDidLoad {
  [super viewDidLoad];
  [myImageView setImage:[[myImageView image] stretchableImageWithLeftCapWidth:5 topCapHeight:5 ]];
}

答案 1 :(得分:2)

目前(截至4.5版)是InterfaceBuilder的限制。但是,必须为每个按钮创建一个IBOutlet并手动指定图像在viewDidLoad中是可伸缩的,这不是一个很好的解决方案,如果没有其他原因,它会使创建UI变得更加麻烦,而且更多脆。

而不是那样,让我们​​创建一个UIButton子类,它将始终使任何背景图像默认可伸缩。在此示例中,我仅拉伸正常和突出显示的背景图像。对于生产就绪类,您可能希望检查背景和前景图像的所有状态并拉伸它们。

@implementation NTSTButton

- (id) initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];
    if (self) {
        /* There is no support in IB for stretchable images. So, let's
           make sure _any_ background image assigned to this button 
           stretches correctly.
           Note: Setting the stretch cap to 10px, which should work with
           almost all button background images. 
        */
        UIImage *normalImage = 
                 [[self backgroundImageForState:UIControlStateNormal]
                        stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;

        UIImage *highlightedImage = 
                 [[self backgroundImageForState:UIControlStateHighlighted]
                        stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;

        [self setBackgroundImage:normalImage 
              forState:UIControlStateNormal];

        [self setBackgroundImage:highlightedImage 
              forState:UIControlStateHighlighted];
    }
    return self;
}

@end

答案 2 :(得分:0)

与@answerbot类似,但已更新为iOS 5.0及stretchableImageWithLeftCapWidth:topCapHeight:,现已弃用。

@implementation UIButtonStretchable

- (id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setBackgroundImage: [[self backgroundImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:UIControlStateNormal];
        [self setBackgroundImage: [[self backgroundImageForState:backgroundImageForState:UIControlStateHighlighted] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:backgroundImageForState:UIControlStateHighlighted];
    }
    return self;
}
@end

答案 3 :(得分:0)

iOS7还引入了资产目录,您可以在其中指定图像的可伸缩区域,但这仅适用于您只支持iOS7的情况(即,您不关心原始iPad,iPod touch或3GS的用户;是的,iOS中没有碎片。

请参阅https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/SlicinganImage/SlicinganImage.html#//apple_ref/doc/uid/TP40013303-CH4-SW1

答案 4 :(得分:0)

Stretching部分使用View个配置。

  • 首先,将View的模式更改为Aspect fill

  • 然后在Stretching部分中编辑X,Y,宽度,高度字段。 例如:假设您的图片尺寸为10x20,并希望将其放入视图尺寸5x10 ==>设定X = 5/10 = 0.5,Y = 10/20 = 0.5

注意:IB不允许您使用较小的图像“拉伸”到更大的帧中,因此您需要将图像设计得尽可能大