国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - IOS - iOS圖片拉伸小技巧

iOS圖片拉伸小技巧

2021-01-18 13:25super_man_ww IOS

這篇文章主要為大家詳細介紹了iOS圖片拉伸小技巧,由淺入深的幫助大家掌握iOS圖片拉伸的相關技巧,感興趣的小伙伴們可以參考一下

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

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

iOS圖片拉伸小技巧

button.png,尺寸為:24x60

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 得到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圖片拉伸小技巧

可以看到,效果非常地差。原因很簡單,因為原圖大小為24x60,現在整張圖片被全方位拉伸為150x50,比較嚴重的是圖片的4個角。
有些人可能馬上想到一個解決方案,你叫美工把圖片做大一點不就好了么,怎么拉伸都沒事。沒錯,這是一種解決方案,不過不建議采取。原因很簡單:1.圖片大,導致安裝包也大,加載到內存中也大;2.有更好的解決方案。
細看一下圖片,其實圖片會變得難看,完全是因為4個角被拉伸了,中間的拉伸并沒有明顯地丑化外觀。因此要想小圖片被拉伸后不會變得難看,在圖片拉伸的時候,我們只需拉伸圖片的中間一塊矩形區域即可,不要拉伸邊緣部分。
比如只拉伸下圖的矩形區域,上下左右的邊緣都不拉伸:

iOS圖片拉伸小技巧

ios中提供很好用的api幫我們實現上述功能。到ios 6.0為止,ios提供了3種圖片拉伸的解決方案,接下來分別詳細介紹這些方案。
一、ios 5.0之前
ios中有個叫端蓋(end cap)的概念,用來指定圖片中的哪一部分不用拉伸。比如下圖中,黑色代表需要被拉伸的矩形區域,上下左右不需要被拉伸的邊緣就稱為端蓋。

iOS圖片拉伸小技巧

使用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圖片拉伸小技巧

可以發現,圖片非常美觀地顯示出來了
注意:
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圖片拉伸小技巧

 三、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圖片拉伸小技巧

以上就是本文的全部內容,希望對大家熟練掌握ios圖片拉伸技巧有所幫助。

延伸 · 閱讀

精彩推薦
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

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

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

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

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

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

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

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

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

    LYSNote5432021-02-04
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

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

    執著丶執念5272021-01-16
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

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

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

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

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

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

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

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

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

    CodingFire13652021-02-26
  • IOSiOS中UILabel實現長按復制功能實例代碼

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

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

    devilx12792021-04-02
主站蜘蛛池模板: 欧美黄色一区 | baoyu123成人免费看视频 | 男人的天堂在线免费视频 | 亚洲精品字幕 | 高清视频一区 | 久久精品亚洲精品国产欧美kt∨ | 一区二区三区在线视频播放 | 色官网| 国产情侣av自拍 | 欧洲精品一区 | 搞黄免费视频 | 亚洲免费在线观看 | 91免费小视频 | 亚洲一区二区三区视频 | 日韩一区二区三区视频 | 免费成人在线网站 | 国产精品久久久久久久 | 爱色av·com| 97精品国产| 美女视频一区二区三区 | 日韩av免费在线观看 | 欧美中文在线 | 性色蜜桃x88av | 老司机午夜免费精品视频 | 久久一二 | 天天干人人 | av成人毛片| 欧美日韩一二三区 | 欧美日本高清 | 在线中文一区 | 欧美在线播放一区 | 欧美日韩一级在线观看 | 欧美日韩在线电影 | 亚洲精品一区在线观看 | 中文在线一区二区 | 欧美污污 | 亚洲电影在线观看 | 日韩午夜av | 亚洲精品三级 | 99re在线| 成人av一区二区三区 |