XQ原始尺寸是(128*112),通過(guò)代碼將這張圖片的設(shè)置為按鈕的背景圖片,將創(chuàng)建好的寬高設(shè)置為(W = 200,H = 50)
原因分析:是將原是尺寸為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)單
方法二:
有些人可能馬上想到一個(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:居中顯示