有时候,我们会遇到这样的需求:将这张图片进行拉伸并且中间的尖角需要一直保持在中间且两边的圆角也保持不变。就是只进行两边部分的拉伸,中间的部分需要保持不变。
先说一下简单的思路:对图片进行两次拉伸,先进行左边部分的拉伸后进行右边部分的拉伸。
需要注意的是:在进行完左边拉伸之后,需要把图片进行固定之后再进行右边的拉伸。
代码如下:
// 获取固定尺寸的图片
- (UIImage *)captureView:(UIView *)view{
UIGraphicsBeginImageContext(view.frame.size);
CGContextRef context =UIGraphicsGetCurrentContext();
[view.layerrenderInContext:context];
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
上面这段代码属于比较关键的代码:
现在假设需要拉倒的宽高是(260,38),原始图片宽高是(55,38)
UIImageView *bgView =[[UIImageView alloc]init];
bgView.frme =CGRectMake(0,0,260/2 + 55/2, 38);
UIImage *image = [UIImageimageName:@"float_up"];
// 拉伸图片(拉伸左边)edg部分的要被拉伸的范围,设置在图片的左边部分
UIImage *newImage1 = [imageresizableImageWithCapInsets:UIEdgeInsetsMake(8, 10, 0, 40) resizingMode:UIImageResizingModeStretch];
bgView.imag =newImage1;
// 获取到bgview的图片 不能通过 bgview.image获取,否则会得到原始图片
UIImage *newImage2 = [selfcaptureView:bgview];
// 进行右半部分的拉伸
UIImage *newImage3 =[newImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(8,260/2 + 55/2 , 0, 10) resizingMode:UIImageResizingModeStretch];
UIImageView *bgView2 =[[UIImageView alloc] init];
bgView2.frame =CGRectMake(0,0,260, 38);
bgView2.image = newImage3;
至此,图片的拉伸完成。效果图:
完成啦!