iOS筆記-圖片兩邊拉伸,中間保持不變

? 今天開發(fā)過程中遇到了圖片拉伸的問題。 一般情況下

- (UIImage*)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode

下面上效果圖與切圖。


效果圖


切圖

來說一下我處理這個圖片的方法。

1.先拉伸菱形左邊,保持右邊不變。

2.改變圖片的Size。

3.拉伸圖片右邊。

用到的拉伸圖片的方法

- (UIImage*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight

//可拉伸的范圍都是距離leftCapWidth后的1豎排像素,和距離topCapHeight后的1橫排像素

先初始化一個imageView

UIImageView*imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];

第一步 拉伸圖片左邊

UIImage*image = [UIImageimageNamed:@"xxx"];

// 因為是距離leftCapWidth后的1豎排像素,所以可以把leftCapWidth設(shè)置為0

// 菱形的高度為10px,所以我們要在菱形下面拉伸這個圖片。

image = [image stretchableImageWithLeftCapWidth:0 topCapHeight:5]

這樣拉伸完以后 圖片會變成-------------- ◇ - 這個樣子

第二步 改變圖片的size


// 獲取imageView的寬度

CGFloat iamgeViewWidth = CGRectGetWidth(iamgeView.frame);

// 這里imageWidth是切圖的寬度

CGFloat imageWidth = 20;

// 圖片的高度

CGFloat imageHeight = CGRectGetHeight(iamgeView.frame);

// 如果需要菱形居中顯示的話,改變完以后的圖片的寬度應(yīng)該是imageView寬度的1/2加上原圖寬度的1/2,這樣拉伸右邊的話,菱形永遠居中

CGFloat tempWidth = (iamgeViewWidth + imageWidth) / 2.0f;

// 重新繪制Image

UIGraphicsBeginImageContextWithOptions(CGSizeMake(tempWidth,imageHeight),NO, [UIScreenmainScreen].scale);

[image drawInRect:CGRectMake(0,0, tempWidth,imageHeight)];

UIImage * newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();?

第三部 拉伸圖片右邊

// leftCapWidth設(shè)置為新圖的寬度減去1px,就會新圖拉伸最右邊的1px的圖片填充整個imageView

iamgeView.image= [newImage stretchableImageWithLeftCapWidth:tempWidth -0.5 topCapHeight:5];

這是我暫時想到的拉伸兩邊中間不變的辦法,如果哪位朋友有更好的辦法,歡迎留言或者私信。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容