亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中實現圖片自適應拉伸效果的方法

2020-07-26 02:53:15
字體:
來源:轉載
供稿:網友

前言

在Android中實現圖片的拉伸特別特別簡單,甚至不用寫一行代碼,直接使用.9圖片進行劃線即可。但是iOS就沒這么簡單了,比如對于下面的一張圖片(原始尺寸:200*103):

我們不做任何處理,直接將它用作按鈕的背景圖片:

//// ViewController.m// ChatBgTest//// Created by 李峰峰 on 2017/1/23.// Copyright © 2017年 李峰峰. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self addBtn];} -(void)addBtn{ // 創建一個按鈕 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 設置按鈕的frame btn.frame = CGRectMake(50, 300, 300, 103); // 加載圖片 UIImage *image = [UIImage imageNamed:@"chat_bg"]; // 設置按鈕的背景圖片 [btn setBackgroundImage:image forState:UIControlStateNormal]; // 將按鈕添加到控制器的view [self.view addSubview:btn];} @end

運行效果如下:

可以看到圖片被明顯拉伸,顯示效果較差。今天我們研究內容就是圖片自適應拉伸。

圖片自適應拉伸

1、iOS5之前

iOS中有個叫端蓋(end cap)的概念,用來指定圖片中的哪一部分不用拉伸,如下圖:設置topCapHeight、leftCapWidth、bottomCapHeight、lerightCapWidth,圖中的黑色區域就是圖片拉伸的范圍,也就是說邊上的不會被拉伸。

使用UIImage的下面這個方法,可以通過設置端蓋寬度返回一個經過拉伸處理的UIImage對象:

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

這個方法只有2個參數,leftCapWidth代表左端蓋寬度,topCapHeight代表上端蓋高度。系統會自動計算出右端蓋寬度rightCapWidth和底端蓋高度bottomCapHeight,代碼如下:

/** 第一種拉伸方式(iOS5之前) */-(void)stretchTest1{  // 創建一個按鈕 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 設置按鈕的frame btn.frame = CGRectMake(50, 300, 300, 103); // 加載圖片 UIImage *image = [UIImage imageNamed:@"chat_bg"];  // 設置左邊端蓋寬度 NSInteger leftCapWidth = image.size.width * 0.5f; // 設置上邊端蓋高度 NSInteger topCapHeight = image.size.height * 0.5f;   UIImage *newImage = [image stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];  // 設置按鈕的背景圖片 [btn setBackgroundImage:newImage forState:UIControlStateNormal]; // 將按鈕添加到控制器的view [self.view addSubview:btn];}

這樣一來,其實我們圖片的可拉伸范圍只有1 * 1,所以再怎么拉伸都不會影響圖片的外觀,運行效果如下:

現在再看一下效果是不是好多了。

2、iOS5

在iOS 5.0中,UIImage又有一個新方法可以處理圖片的拉伸問題:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets 
typedef struct UIEdgeInsets { CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'} UIEdgeInsets;

這個方法只接收一個UIEdgeInsets類型的參數,可以通過設置UIEdgeInsets中的CGFloat top, left, bottom, right就是用來設置上端蓋、左端蓋、下端蓋、右端蓋的尺寸(逆時針方向)。

/** 第二種拉伸方式(iOS5) */-(void)stretchTest2{  // 創建一個按鈕 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 設置按鈕的frame btn.frame = CGRectMake(50, 300, 300, 103); // 加載圖片 UIImage *image = [UIImage imageNamed:@"chat_bg"];  // 設置端蓋的值 CGFloat top = image.size.height * 0.5; CGFloat left = image.size.width * 0.5; CGFloat bottom = image.size.height * 0.5; CGFloat right = image.size.width * 0.5;  UIEdgeInsets edgeInsets = UIEdgeInsetsMake(top, left, bottom, right);  // 拉伸圖片 UIImage *newImage = [image resizableImageWithCapInsets:edgeInsets];  // 設置按鈕的背景圖片 [btn setBackgroundImage:newImage forState:UIControlStateNormal]; // 將按鈕添加到控制器的view [self.view addSubview:btn];}

運行效果與第一種一樣,就不再截圖了。

3、iOS6

在iOS6.0中,UIImage又提供了一個方法處理圖片拉伸:

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

相比iOS5中的方法多了一個resizingMode參數:

typedef NS_ENUM(NSInteger, UIImageResizingMode) { UIImageResizingModeTile, // 平鋪模式,通過重復顯示UIEdgeInsets指定的矩形區域來填充圖片 UIImageResizingModeStretch, // 拉伸模式,通過拉伸UIEdgeInsets指定的矩形區域來填充圖片};

具體實現代碼如下:

/** 第三種拉伸方式(iOS6) */-(void)stretchTest3{  // 創建一個按鈕 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 設置按鈕的frame btn.frame = CGRectMake(50, 300, 300, 103); // 加載圖片 UIImage *image = [UIImage imageNamed:@"chat_bg"];  // 設置端蓋的值 CGFloat top = image.size.height * 0.5; CGFloat left = image.size.width * 0.5; CGFloat bottom = image.size.height * 0.5; CGFloat right = image.size.width * 0.5;  // 設置端蓋的值 UIEdgeInsets edgeInsets = UIEdgeInsetsMake(top, left, bottom, right); // 設置拉伸的模式 UIImageResizingMode mode = UIImageResizingModeStretch;  // 拉伸圖片 UIImage *newImage = [image resizableImageWithCapInsets:edgeInsets resizingMode:mode];  // 設置按鈕的背景圖片 [btn setBackgroundImage:newImage forState:UIControlStateNormal]; // 將按鈕添加到控制器的view [self.view addSubview:btn];}

運行效果與第一種一樣,就不再截圖了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對給位iOS開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久久不卡| 美乳少妇欧美精品| 91亚洲精品一区二区| 亚洲a一级视频| 亚洲电影免费观看高清完整版在线观看| 国产精自产拍久久久久久蜜| 在线看日韩av| 亚洲成人精品久久| 国产精品久久久久77777| 欧美国产日韩精品| 国外成人性视频| 欧美最顶级丰满的aⅴ艳星| 午夜欧美不卡精品aaaaa| 久久久这里只有精品视频| 亚洲女性裸体视频| 成人h片在线播放免费网站| 国产一区二区三区免费视频| 精品亚洲国产视频| 久久久久久91| 成人国产精品av| 777国产偷窥盗摄精品视频| 亚洲高清av在线| 国产999在线| 精品久久久久久久久久国产| 亚洲男女性事视频| 2019中文字幕在线| 国产日韩中文在线| 国产欧美日韩亚洲精品| 成人h视频在线观看播放| 中文字幕在线看视频国产欧美在线看完整| 性欧美办公室18xxxxhd| 欧美性做爰毛片| 日韩有码在线电影| 亚洲精品视频免费在线观看| 欧美性高跟鞋xxxxhd| 日日狠狠久久偷偷四色综合免费| 亚洲成人亚洲激情| 欧美日韩人人澡狠狠躁视频| 国产精品一区二区三区久久| 92版电视剧仙鹤神针在线观看| 九九久久久久99精品| 久久久免费观看视频| 高清欧美电影在线| 日韩中文字幕网站| 中文字幕精品网| 亚洲第一区第一页| 国产精品欧美激情在线播放| 欧美日韩视频在线| 久久在精品线影院精品国产| 欧美国产极速在线| yw.139尤物在线精品视频| 久久久国产精品视频| 96精品久久久久中文字幕| 久久亚洲电影天堂| 久久久久亚洲精品国产| 91在线高清视频| 黑人狂躁日本妞一区二区三区| 91精品久久久久久久久不口人| 亚洲国产日韩欧美在线动漫| 久99九色视频在线观看| 国产精品三级美女白浆呻吟| 国产综合在线看| 国产日产欧美精品| 国产精品夜间视频香蕉| 日本午夜人人精品| 日韩一区二区在线视频| 欧美日韩国产成人在线观看| 欧美日韩成人精品| 国产精品视频一区国模私拍| 日韩精品中文在线观看| 日韩欧美在线视频免费观看| 欧美极品在线视频| 精品小视频在线| 欧美日韩亚洲一区二区三区| 91色视频在线观看| 久久99国产综合精品女同| 亚洲精品99久久久久| 欧美日韩亚洲系列| 成人精品视频99在线观看免费| 国内精品在线一区| 欧美天天综合色影久久精品| 国语自产精品视频在线看抢先版图片| 欧美大片在线免费观看| 午夜精品视频在线| 国产一区二区黑人欧美xxxx| 欧美激情视频一区二区三区不卡| 亚洲自拍偷拍在线| 久久久久久久久网站| 亚洲男人的天堂在线| 欧美日韩一区二区免费在线观看| 国产精品日日做人人爱| 亚洲精品国精品久久99热| 国产精品成人品| 91精品国产91久久久久久吃药| 欧美不卡视频一区发布| 亚州国产精品久久久| 欧美性猛交xxxx免费看| 亚洲xxxx做受欧美| 日本中文字幕不卡免费| 91免费视频国产| 亚洲高清在线观看| 国产成人自拍视频在线观看| 亚洲人成网在线播放| 日韩成人在线播放| 亚洲国产97在线精品一区| 欧美日韩成人在线视频| 久久精品亚洲热| 精品无人国产偷自产在线| 国产一区二区在线免费视频| 日韩av在线免费播放| 高清一区二区三区四区五区| 精品国产91久久久久久老师| 亚洲国产精品yw在线观看| 精品久久久久久国产91| 国产精品盗摄久久久| 黑人欧美xxxx| 久久香蕉国产线看观看av| 欧美电影免费观看大全| 中文字幕日韩欧美在线视频| 亚洲视频自拍偷拍| 伊人精品在线观看| 亚洲视频自拍偷拍| 一本一道久久a久久精品逆3p| 亚洲精品久久久久久久久久久久| 久久精品国产一区二区三区| 国产啪精品视频网站| 亚洲欧美日韩一区在线| 国产精品美女呻吟| 国产欧美日韩精品在线观看| 亚洲精品国偷自产在线99热| 日韩免费高清在线观看| 色婷婷**av毛片一区| 秋霞av国产精品一区| 国产精品欧美激情在线播放| 97精品国产97久久久久久春色| 久久影院中文字幕| 狠狠做深爱婷婷久久综合一区| 欧美成人手机在线| 亚洲xxxxx| 欧美激情在线有限公司| 亚洲男人av电影| 久久天天躁狠狠躁夜夜av| 欧美体内谢she精2性欧美| 日本高清+成人网在线观看| 在线电影欧美日韩一区二区私密| 亚洲激情在线观看视频免费| 亚洲最大福利视频| 91久久精品国产91性色| 国产欧美久久久久久| 美女av一区二区| 日本一区二区不卡| 91免费人成网站在线观看18| 日韩中文字幕精品| 亚洲人成自拍网站| 亚洲a中文字幕| 秋霞成人午夜鲁丝一区二区三区| 日韩av大片免费看| 久久久国产视频| 狠狠操狠狠色综合网| 国产狼人综合免费视频| 一夜七次郎国产精品亚洲| 在线日韩中文字幕| 在线播放日韩专区| 久久精品人人爽|