1. 程式人生 > >IOS圖片拉伸的幾種方式

IOS圖片拉伸的幾種方式

在iOS開發工作中,其實圖片拉伸還是很常用的,特別是在UI不給力的情況下,那麼下面根據以往的工作經驗,現在總結了一下最新且常用的兩種拉伸方法。
關鍵字:Show Overview、Slicing、Slice、resize、stretch

拉伸前:(假如給一個button設定一個背景圖片)

[self.myButton setBackgroundImage:[UIImage imageNamed:@"004"] forState:UIControlStateNormal];

效果如下:(四周很模糊,明顯給使用者很渣渣的感覺)


拉伸前效果

第一種:程式碼拉伸,封裝到了一個分類裡,直接呼叫即可:

封裝的分類方法:

/**
 *  返回一張可以隨意拉伸不變形的圖片
 *  @param name 圖片名字
 */
+(UIImage *)stretchableImageWithImgae:(NSString *)name{

    UIImage *normal = [UIImage imageNamed:name];
    CGFloat w = normal.size.width * 0.5;
    CGFloat h = normal.size.height * 0.5;
    return [normal stretchableImageWithLeftCapWidth:w topCapHeight:h];
}

執行拉伸程式碼:

 UIImage *image =   [UIImage  stretchableImageWithImgae:@"004"];
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];

拉伸效果圖如下:


拉伸完美效果

第一種補充:resize方法(-resizableImageWithCapInsets)
該方法和第一種基本類似,但是這裡不方便的地方就是預留的部分不好把握,因為要拉伸的圖片大小不可控,不推薦使用,但是在這裡也介紹一下。

  UIImage *image = [UIImage
imageNamed:@"004"]; CGFloat top = 10; // 頂端預留部分 CGFloat bottom = 10 ; // 底端預留部分 CGFloat left = 40; // 左端預留部分 CGFloat right = 40; // 右端預留部分 UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right); ///注意:拉伸之後一定要賦值回去 image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch]; //UIImageResizingModeStretch:`拉伸`模式,通過`拉伸`Insets指定的矩形區域來填充圖片 //UIImageResizingModeTile:`平鋪`模式,通過`重複顯示`Insets指定的矩形區域來填充圖片 [self.myButton setBackgroundImage:image forState:UIControlStateNormal];

第二種:點選圖片直接使用切片拉伸:

進入Assets.xcassets -> 選中圖片


兩種開始方式
拉伸方式選擇
水平拉伸
垂直拉伸
拉伸的幾種拉伸方式選擇
拉伸切片模式

執行程式碼:程式碼裡和平常一樣

 UIImage *image = [UIImage imageNamed:@"004"];
 [self.myButton setBackgroundImage:image forState:UIControlStateNormal];

完美拉伸效果

第二種補充:平鋪效果


平鋪效果測試
平鋪效果成功

第二種補充:聊天氣泡效果


聊天氣泡測試
聊天氣泡效果成功展示

最後的兩個補充,程式碼都是很正常的程式碼:

 UIImage *image = [UIImage imageNamed:@"001"];
 [self.myButton setBackgroundImage:image forState:UIControlStateNormal];

怎麼樣,這個切片拉伸功能強大吧?也很方便吧??推薦使用哦!