如何使用可拉伸图像创建 UIImageView

Posted

技术标签:

【中文标题】如何使用可拉伸图像创建 UIImageView【英文标题】:How to create UIImageView with stretchable image 【发布时间】:2013-07-24 15:37:32 【问题描述】:

在我的应用程序中,一项要求是将标签的背景设置为某个图像。我已经通过这段代码在 UIlabel 的后面设置图像来做到这一点

.H 文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

    UIImageView *lblBGIV;
 
@end

.M 文件

- (void)viewDidLoad

    [super viewDidLoad];

    lblBGIV = [[UIImageView alloc] init];

    UIImage *lblBGImg = [[UIImage imageNamed:@"textlblbg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 8, 0, 8)];

    lblBGIV.image = lblBGImg;


- (void)updateLabelMethod:(NSTimer *)theTimer 

            lblBGIV.frame = CGRectMake(label.frame.origin.x-9, label.frame.origin.y-5, label.frame.size.width+18, 26);

            [self.myScrollView addSubview:lblBGIV];
            [self.myScrollView sendSubviewToBack:lblBGIV];

【问题讨论】:

您能否将 textlblbg.png 按原样添加到问题中? 【参考方案1】:

您必须创建不同的代码来为不同的 ios 设置图像。使用此代码,

UIImage *lblBGImg;
    float currentVersion = 6.0;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion)
    
        //device have iOS 6 or above
        lblBGImg = [[UIImage imageNamed:@"textlblbg41.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)  resizingMode:UIImageResizingModeStretch];
    else
        //device have iOS 5.1 or belove
        lblBGImg = [[UIImage imageNamed: @"textlblbg41.png"] stretchableImageWithLeftCapWidth:15.0 topCapHeight:15.0];
    
    lblBGIV.image = lblBGImg;

这对两个 iOS 都有用。

【讨论】:

Apple 建议检查对象是否响应选择器,而不是检查 iOS 版本。 if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) ... (developer.apple.com/library/mac/#documentation/DeveloperTools/…)【参考方案2】:

请改用resizableImageWithCapInsets:resizingMode:

UIImage *lblBGImg = [[UIImage imageNamed:@"textlblbg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 8, 0, 8) resizingMode:UIImageResizingModeStretch];

【讨论】:

@Kane 仅适用于 iOS 6.0 及更高版本。【参考方案3】:

斯威夫特:

UIImage(named: "videoSliderFiller")?.resizableImage(withCapInsets: UIEdgeInsetsMake(0, 0, 0, 0), resizingMode: .stretch)

【讨论】:

以上是关于如何使用可拉伸图像创建 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

如何切片图像并使用图像资产使其可拉伸

如何阻止我的自定义 UITableViewCell backgroundImage 可拉伸?

可拉伸的 UIButton 图像

如何构建一个包含图像的视差样式/可拉伸的表格视图标题,而不会出现丑陋的黑客攻击?

iOS 自定义键盘可拉伸图像停止拉伸

UIButton - 仅在一个方向上可拉伸的背景图像?