一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS圖片拉伸技巧(iOS5.0、iOS6.0)

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

2021-03-02 16:14CoderMJLee IOS

這篇文章主要為大家詳細介紹了iOS圖片拉伸技巧,提供了3種圖片拉伸的解決方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下

縱觀移動市場,一款移動app,要想長期在移動市場立足,最起碼要包含以下幾個要素:實用的功能、極強的用戶體驗、華麗簡潔的外觀。華麗外觀的背后,少不了美工的辛苦設計,但如果開發人員不懂得怎么合理展示這些設計好的圖片,將會糟蹋了這些設計,功虧一簣。

比如下面張圖片,本來是設計來做按鈕背景的:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

 button.png,尺寸為:24x60

現在我們把它用作為按鈕背景,按鈕尺寸是150x50:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)viewdidload
{
 [super viewdidload];
 // 得到view的尺寸
 cgsize viewsize = self.view.bounds.size;
 
 // 初始化按鈕
 uibutton *button = [[uibutton alloc] init];
 // 設置尺寸
 button.bounds = cgrectmake(0, 0, 150, 50);
 // 設置位置
 button.center = cgpointmake(viewsize.width * 0.5f, viewsize.height * 0.5f);
 
 // 加載圖片
 uiimage *image = [uiimage imagenamed:@"button"];
 // 設置背景圖片
 [button setbackgroundimage:image forstate:uicontrolstatenormal];
 
 // 添加按鈕
 [self.view addsubview:button];
}

運行效果圖:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

可以看到,效果非常地差。原因很簡單,因為原圖大小為24x60,現在整張圖片被全方位拉伸為150x50,比較嚴重的是圖片的4個角。

有些人可能馬上想到一個解決方案,你叫美工把圖片做大一點不就好了么,怎么拉伸都沒事。沒錯,這是一種解決方案,不過不建議采取。原因很簡單:1.圖片大,導致安裝包也大,加載到內存中也大;2.有更好的解決方案。

細看一下圖片,其實圖片會變得難看,完全是因為4個角被拉伸了,中間的拉伸并沒有明顯地丑化外觀。因此要想小圖片被拉伸后不會變得難看,在圖片拉伸的時候,我們只需拉伸圖片的中間一塊矩形區域即可,不要拉伸邊緣部分。

比如只拉伸下圖的矩形區域,上下左右的邊緣都不拉伸:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

ios中提供很好用的api幫我們實現上述功能。到ios 6.0為止,ios提供了3種圖片拉伸的解決方案,接下來分別詳細介紹這些方案。

一、ios 5.0之前

ios中有個叫端蓋(end cap)的概念,用來指定圖片中的哪一部分不用拉伸。比如下圖中,黑色代表需要被拉伸的矩形區域,上下左右不需要被拉伸的邊緣就稱為端蓋。

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

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

 

復制代碼 代碼如下:
- (uiimage *)stretchableimagewithleftcapwidth:(nsinteger)leftcapwidth topcapheight:(nsinteger)topcapheight;

這個方法只有2個參數,leftcapwidth代表左端蓋寬度,topcapheight代表頂端蓋高度。系統會自動計算出右端蓋寬度(rightcapwidth)和底端蓋高度(bottomcapheight),算法如下:

 

?
1
2
3
4
5
// width為圖片寬度
rightcapwidth = width - leftcapwidth - 1;
 
// height為圖片高度
bottomcapheight = height - topcapheight - 1

經過計算,你會發現中間的可拉伸區域只有1x1

?
1
2
3
4
5
// stretchwidth為中間可拉伸區域的寬度
 stretchwidth = width - leftcapwidth - rightcapwidth = 1;
  
 // stretchheight為中間可拉伸區域的高度
 stretchheight = height - topcapheight - bottomcapheight = 1;

因此,使用這個方法只會拉伸圖片中間1x1的區域,并不會影響到邊緣和角落。

下面演示下方法的使用:

?
1
2
3
4
5
6
// 左端蓋寬度
nsinteger leftcapwidth = image.size.width * 0.5f;
// 頂端蓋高度
nsinteger topcapheight = image.size.height * 0.5f;
// 重新賦值
image = [image stretchableimagewithleftcapwidth:leftcapwidth topcapheight:topcapheight];

調用這個方法后,原來的image并不會發生改變,會產生一個新的經過拉伸的uiimage,所以第6行中需要將返回值賦值回給image變量

運行效果:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

可以發現,圖片非常美觀地顯示出來了

注意:

1.這個方法在ios 5.0出來后就過期了

2.這個方法只能拉伸1x1的區域

 

二、ios 5.0

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

 

復制代碼 代碼如下:
- (uiimage *)resizableimagewithcapinsets:(uiedgeinsets)capinsets


這個方法只接收一個uiedgeinsets類型的參數,可以通過設置uiedgeinsets的left、right、top、bottom來分別指定左端蓋寬度、右端蓋寬度、頂端蓋高度、底端蓋高度

 

?
1
2
3
4
5
6
7
cgfloat top = 25; // 頂端蓋高度
cgfloat bottom = 25 ; // 底端蓋高度
cgfloat left = 10; // 左端蓋寬度
cgfloat right = 10; // 右端蓋寬度
uiedgeinsets insets = uiedgeinsetsmake(top, left, bottom, right);
// 伸縮后重新賦值
image = [image resizableimagewithcapinsets:insets];

運行效果:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

三、ios 6.0

在ios6.0中,uiimage又提供了一個方法處理圖片拉伸

 

復制代碼 代碼如下:
- (uiimage *)resizableimagewithcapinsets:(uiedgeinsets)capinsets resizingmode:(uiimageresizingmode)resizingmode


對比ios5.0中的方法,只多了一個uiimageresizingmode參數,用來指定拉伸的模式:

 

uiimageresizingmodestretch:拉伸模式,通過拉伸uiedgeinsets指定的矩形區域來填充圖片
uiimageresizingmodetile:平鋪模式,通過重復顯示uiedgeinsets指定的矩形區域來填充圖片

?
1
2
3
4
5
6
7
cgfloat top = 25; // 頂端蓋高度
cgfloat bottom = 25 ; // 底端蓋高度
cgfloat left = 10; // 左端蓋寬度
cgfloat right = 10; // 右端蓋寬度
uiedgeinsets insets = uiedgeinsetsmake(top, left, bottom, right);
// 指定為拉伸模式,伸縮后重新賦值
image = [image resizableimagewithcapinsets:insets resizingmode:uiimageresizingmodestretch];

運行效果:

iOS圖片拉伸技巧(iOS5.0、iOS6.0)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
主站蜘蛛池模板: 乌克兰17一18处交 | 国产传媒天美果冻 | 热99精品| 女黑人尺寸bbb | 草嫩社区 | 男人女人性生活视频 | 欧美黑人ⅹxxx片 | 美女污视频在线观看 | 高清视频在线观看+免费 | 2012手机在线中文字幕 | 视频在线观看高清免费 | 男人把大ji巴放进男人免费视频 | 亚洲日本视频在线 | 含羞草国产亚洲精品岁国产精品 | 欧美日韩国产亚洲一区二区三区 | 日韩在线中文字幕 | 激情五色月 | 亚洲国产精品婷婷久久久久 | 欧美视频一区二区三区在线观看 | 俄罗斯引擎首页进入 | 娇妻与老头绿文小说系列 | 2020国产精品视频免费 | 无码AV毛片色欲欧洲美洲 | 午夜国产精品 | 欧美成人aa久久狼窝动画 | 跪在老师脚下吃丝袜脚 | 国产精品久久久久久久人人看 | 黑人巨大videosjapan高清 黑人好大 | 日本一道本视频 | 三级欧美在线 | 2021海角社区最新版 | 高清欧美不卡一区二区三区 | 九九热国产视频 | 亚洲gogo人体大胆西西安徽 | 亚洲精品一二区 | x8x8在线永久免费观看 | 欧美一级二级片 | 色狠狠婷婷97 | 成人免费在线视频 | 1717国产精品视频免费 | 亚洲AV无码A片在线观看蜜桃 |