有時候,我們會遇到這樣的需求:將這張圖片進行拉伸并且中間的尖角需要一直保持在中間且兩邊的圓角也保持不變。就是只進行兩邊部分的拉伸,中間的部分需要保持不變。
先說一下簡單的思路:對圖片進行兩次拉伸??,先進行左邊部分的拉伸后進行右邊部分的拉伸。
???需要注意的是:在進行完左邊拉伸之后,需要把圖片進行固定之后再進行右邊的拉伸。
?代碼如下:
// 獲取固定尺寸的圖片?
- (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;
至此,圖片的拉伸完成。效果圖:
?完成啦!