图片两边拉伸,中间不变

效果图,上面是原始图片,下面是拉伸过的图。


图片两边拉伸,中间不变_第1张图片
1.png

朋友问我的,一开始我以为很简单,我就开始尝试写了:
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
一开始用这个方法,不行,箭头总在一边
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
后来用这个,也不行,还是在一边

图片两边拉伸,中间不变_第2张图片
2.png

接着用了Show Slicing,也不行,箭头还是在一边,或者出现一些奇怪的图片,不是想要的效果。

最后还是要依靠我大网友,在 聊天气泡图片对称拉伸(箭头保持在中间) 得到了解决方法。
思路如下:

图片两边拉伸,中间不变_第3张图片
StretchImage.jpg

对小图片箭头右侧进行拉伸,拉伸后生成一张图片,再对这个图片进行左侧拉伸,保证两侧拉伸的距离一样就可以了。

   //初始图片
  UIImage *initialImage = [UIImage imageNamed:@"jiantou"];
  //拉伸图片右侧
  UIImage *rightStretchImage = [initialImage stretchableImageWithLeftCapWidth:initialImage.size.width *0.8 topCapHeight:initialImage.size.height *0.5];
  //拉伸后的宽度=总宽度/2+初始图片宽度/2
  CGFloat stretchWidth = (SCREEN_WIDTH-60)/2+initialImage.size.width/2;
  //获得右侧拉伸过后的图片
  UIGraphicsBeginImageContextWithOptions(CGSizeMake(stretchWidth, 90), NO, [UIScreen mainScreen].scale);
  [rightStretchImage drawInRect:CGRectMake(0, 0, stretchWidth, 90)];
  UIImage *firstStretchImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  //拉伸图片左侧,获得最终图片
  UIImage *finalImage = [firstStretchImage stretchableImageWithLeftCapWidth:initialImage.size.width *0.2 topCapHeight:initialImage.size.height*0.5]; 
  UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(30, 200, SCREEN_WIDTH-60, 100)];
  imageView.image = finalImage;
  [self.view addSubview:imageView];

GitHub:StretchImage

参考:聊天气泡图片对称拉伸(箭头保持在中间)

你可能感兴趣的:(图片两边拉伸,中间不变)