8 ios開(kāi)發(fā)中的圖片拉伸

XQ原始尺寸是(128*112),通過(guò)代碼將這張圖片的設(shè)置為按鈕的背景圖片,將創(chuàng)建好的寬高設(shè)置為(W = 200,H = 50)


具體實(shí)現(xiàn)如下



原因分析:是將原是尺寸為W=128 * H=112的圖片拉伸成了W=200, H=50;

解決方案:

1.找美工MM重做一張較大的圖片,這樣的話(huà)就會(huì)出現(xiàn)軟件包將來(lái)會(huì)變大,占用空間更大;

2.蘋(píng)果為我們提供了關(guān)于圖片拉伸的API,我們可以直接利用代碼實(shí)現(xiàn)



蘋(píng)果提供的api:最簡(jiǎn)單




方法二:

原圖大小為24x60



'

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


圖片會(huì)變得難看,完全是因?yàn)?個(gè)角被拉伸了,中間的拉伸并沒(méi)有明顯地丑化外觀。因此要想小圖片被拉伸后不會(huì)變得難看,在圖片拉伸的時(shí)候,我們只需拉伸圖片的中間一塊矩形區(qū)域即可,不要拉伸邊緣部分。

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

UIButton實(shí)現(xiàn)背景拉伸,即圖片兩端不拉伸中間拉伸的辦法有如下兩種:

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

UIButton實(shí)現(xiàn)背景拉伸,即圖片兩端不拉伸中間拉伸的辦法有如下兩種:

UIImage *image = [UIImage imageNamed:@"image.png"];

image = [image stretchableImageWithLeftCapWidth:floorf(image.size.width/2) topCapHeight:floorf(image.size.height/2)];

設(shè)置了左端帽之后,rightCapWidth = image.size.width - (image.leftCapWidth + 1); 也就是說(shuō)圖片中間的一像素用來(lái)拉伸。垂直方向同上。設(shè)置之后無(wú)論把image放到什么控件中都可以自動(dòng)拉伸了。

代碼如下:----------------------------

UIImage *buttonImage = [UIImage imageNamed:@"contact.png"];

buttonImage = [buttonImage stretchableImageWithLeftCapWidth:floorf(buttonImage.size.width/2) topCapHeight:floorf(buttonImage.size.height/2)];

UIImage *buttonImageselected = [UIImage imageNamed:@"contactselected.png"];

buttonImage = [buttonImage stretchableImageWithLeftCapWidth:floorf(buttonImage.size.width/2) topCapHeight:floorf(buttonImage.size.height/2)];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 240, 44);

[button setBackgroundImage:buttonImage forState:UIControlStateNormal];

[button setBackgroundImage:buttonImageselected forState:UIControlStateHighlighted];

button.center = CGPointMake(160, 240);

[button setTitle:@"button" forState:UIControlStateNormal];

[button setTitle:@"buttonClick" forState:UIControlStateHighlighted];

[self.view addSubview:button];


第二種方法是在UIButton中加入一個(gè)UIImageView,拉伸imageView,然后將button的背景設(shè)為clearColor等等。把imageView放入button中,并且sendToBack,得到效果

//剛才imageView拉伸的代碼

UIImageView *strechTest = [[UIImageyiView alloc] initWithImage:[UIImage imageNamed:@"contact.png"]];

[strechTest setContentStretch:CGRectMake(0.5f, 0.5f, 0.f, 0.f)];

CGRect frame = strechTest.frame;

frame.size.width += 100;

strechTest.frame = frame;

//把imageView放入button中,并設(shè)置為back

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button1.frame = frame;

button1.center = CGPointMake(160, 140);

[button1 addSubview:strechTest];

[button1 sendSubviewToBack:strechTest];

[button1 setBackgroundColor:[UIColor clearColor]];

[button1 setTitle:@"button" forState:UIControlStateNormal];

[button1 setTitle:@"buttonClick" forState:UIControlStateHighlighted];

[self.view addSubview:button];


---------------------------------------? UIImageView的ContentMode的這些參數(shù)

UIViewContentModeScaleToFill:圖片拉伸至填充這個(gè)UIImageView(圖片可能變形)

UIViewContentModeScaleAspectFit : 圖片拉伸至完全顯示在UIImageView里面為止(圖片不會(huì)變形)

UIViewContentModeScaleAspectFill : 圖片拉伸至 圖片的寬度等于UIImageView的寬度 或者 圖片的高度等于UIImageView的高度為止,然后將圖片居中顯示

UIViewContentModeRedraw : 調(diào)用了setNeedsDisplay方法時(shí),就會(huì)將圖片重新渲染

UIViewContentModeCenter:居中顯示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容