天天看點

iOS聊天起泡(背景圖檔被拉伸不變形)----轉載--待驗證

方法一

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

這個函數是UIImage的一個執行個體函數,它的功能是建立一個​

​内容可拉伸​

​​,而​

​邊角不拉伸​

​的圖檔,需要兩個參數

@param leftCapWidth: 左邊不拉伸區域的寬度,
@param topCapHeight: 上面不拉伸的高度。      

根據設定的寬度和高度,将接下來的一個像素進行左右擴充和上下拉伸。

注意:可拉伸的範圍都是距離leftCapWidth後的1豎排像素,和距離topCapHeight後的1橫排像素。

參數的意義是,如果參數指定10,5。那麼,圖檔左邊10個像素,上邊5個像素。不會被拉伸,x坐标為11和一個像素會被橫向複制,y坐标為6的一個像素會被縱向複制。

注意:隻是對一個像素進行複制到一定寬度。而圖像後面的剩餘像素也不會被拉伸。

方法二

在iOS6.0中,UIImage又提供了一個方法處理圖檔拉伸(适用區域拉伸),如下 :

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingModeNS_AVAILABLE_IOS(6_0);// the interior is resized according to the resizingMode      

UIImageResizingMode參數,用來指定拉伸的模式:

UIImageResizingModeStretch:拉伸模式,通過拉伸UIEdgeInsets指定的矩形區域來填充圖檔

UIImageResizingModeTile:平鋪模式,通過重複顯示UIEdgeInsets指定的矩形區域來填充圖檔

代碼如下:

UIImageView *m_imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0, 240,110)];
//[m_imageView setImage:[[UIImage imageNamed:@"2.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:10]];
[m_imageView setImage:[[UIImageimageNamed:@"1.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(30,30, 30,30)]];
[m_imageView setImage:[[UIImageimageNamed:@"1.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(30,30, 30,30) resizingMode:UIImageResizingModeStretch]];
[self.view addSubview:m_imageView];      

resizeWithImage來使得聊天氣泡圖檔邊緣不拉伸

- (UIImage *)resizeWithImage:(UIImage *)image{
    CGFloat top = image.size.height/2.0;
    CGFloat left = image.size.width/2.0;
    CGFloat bottom = image.size.height/2.0;
    CGFloat right = image.size.width/2.0;
    return [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)resizingMode:UIImageResizingModeStretch];
}
      
  • UIImageResizingModeStrech:拉伸模式,通過拉伸UIEdgeInsets指定的矩形區域來填充圖檔

resizableImageWithCapInsets有四個值上下左右

iOS聊天起泡(背景圖檔被拉伸不變形)----轉載--待驗證

上下左右的值定義了受保護區域,能被拉伸的地方是中間區域,一般我們都設成中心點為了安全。

學習時的痛苦是暫時的 未學到的痛苦是終生的