IOS开发-09.图片拉伸不变形

1.概述

  • 在开发中我们经常会设置控件的背景图片,有时图片太小,而一般系统默认的图片内容显示是填充整个视图的,这个时候若是图片四角是圆角或其他不规则形状的话,在拉伸后会造成图片变形,为了解决这种情况,苹果特别提供了一些方法来保证图片在拉伸后,四角不变形
  • 图例
    IOS开发-09.图片拉伸不变形_第1张图片

2.故事板中直接设置

  • 方法1:
    • 在Xcode6之后,我们可以在资源文件中直接设置图片的属性,通过设置slicing属性,默认情况下是none,我们可以设置水平方向拉伸,垂直方向拉伸,以及水平方向和垂直方向都拉伸
      IOS开发-09.图片拉伸不变形_第2张图片
      -方法2:
    • 实现原理和方法一类似,只不过更加直观,我们可以直接选择show overView,通过拖拽直接设置可拉伸区域,更加直观
      IOS开发-09.图片拉伸不变形_第3张图片
      IOS开发-09.图片拉伸不变形_第4张图片

3.代码设置

  • 1.iOS5以前的方法实现原理(了解)
// LeftCapWidth: 左边多少不能拉伸
// 右边多少不能拉伸 = 控件的宽度 - 左边多少不能拉伸 - 1
//  right  =  width - leftCapWidth - 1
// 1 = width - leftCapWidth - right
// topCapHeight: 顶部多少不能拉伸
// 底部有多少不能拉伸 = 控件的高度 - 顶部多少不能拉伸 - 1
//  bottom =  height - topCapWidth - 1
// 1 = height - topCapWidth - bottom
// stretchableImageWithLeftCapWidth:返回一个新的图片
UIImage *newImage = [image stretchableImageWithLeftCapWidth:5 topCapHeight:5];
  • 2.IOS 5实现方法(了解)
// UIEdgeInsets是告诉系统哪些地方需要受保护, 也就是不可以拉伸
// resizableImageWithCapInsets默认拉伸方式是平铺
UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height * 0.5, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5);//这里设置保护区域后,会在中心点很小的一个视图进行拉伸
UIImage *newImage = [image resizableImageWithCapInsets:insets];
  • 3.IOS 6以后的实现方法
UIButton *btn = [[UIButton alloc] init];
UIImage *image = [UIImage imageNamed:@"图片名称"];
// resizingMode指定拉伸模式
// 平铺UIImageResizingModeTile
// 拉伸UIImageResizingModeStretch
UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5);
UIImage *newImage =  [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];
[btn setBackgroundImage:newImage forState:UIControlStateNormal];
btn.frame = CGRectMake(100, 100, 200, 80);
[self.view addSubview:btn];

你可能感兴趣的:(iOS开发)