一耘戚、基礎(chǔ)知識鋪墊
1.眾所周知嗡髓,導(dǎo)航欄設(shè)置背景圖片有兩個方法:
1.-setBackgroundImage:forBarMetrics:
2.-setBackgroundImage:forBarPosition:barMetrics:
設(shè)置屬性的話分別取:
forBarPosition :
UIBarPositionAny
UIBarPositionBottom :官方解釋shadow above the bar收津,注:除了這個枚舉饿这,其他使用都有效。
UIBarPositionTop
UIBarPositionTopAttached
barMetrics :
UIBarMetricsDefault : 我試過了除了這個默認(rèn)屬性撞秋,其他的使用了都無效长捧。
UIBarMetricsCompact
UIBarMetricsDefaultPrompt
UIBarMetricsCompactPrompt
UIBarMetricsLandscapePhone
UIBarMetricsLandscapePhonePrompt
注:一般情況下,只需要用1方法就行部服。
二唆姐、遇到問題
但是,我就這么設(shè)置廓八,然后遇到一個問題奉芦。
UI給了我們有一張顏色漸變的背景圖,尺寸為750*6剧蹂。
這張圖分別用于:1.我們app中所有的按鈕 2.首頁的一張背景圖 3.導(dǎo)航欄背景
設(shè)置時声功,這張圖默認(rèn)是平鋪的。設(shè)置按鈕和UIImageview時都沒問題宠叼,但是導(dǎo)航欄背景出問題了先巴。
從圖中可以看出,導(dǎo)航欄的顏色和用UIImageView設(shè)置的顏色并不相同冒冬,導(dǎo)航欄中顏色沒有漸變伸蚯。
怎么辦呢,我在想這是什么原因造成的简烤。
我把設(shè)置導(dǎo)航欄的代碼又檢查了一遍剂邮,而且用了各種方法。
比如 : 1.將圖片變成顏色給導(dǎo)航欄設(shè)置backgroundcolor
2.自己來畫漸變色
3.設(shè)置導(dǎo)航欄的透明度
4.自定義UINavigaitonbar横侦、挥萌、、等等
但是毫無效果枉侧,我細(xì)細(xì)琢磨引瀑,發(fā)現(xiàn)該導(dǎo)航欄上的顏色并沒有出現(xiàn)漸變的顏色,而只取到了漸變顏色最左邊的色值榨馁。有個朋友提醒我是不是導(dǎo)航欄設(shè)置顏色和其他控件設(shè)置顏色有什么不同憨栽。
最終我們猜想是導(dǎo)航欄可能是通過像素來平鋪圖片的。而出現(xiàn)上面問題的原因是翼虫,我這張背景圖只有一張屑柔,沒有@2x和@3x。在這里又涉及到關(guān)于@1x和@2x蛙讥、@3x的意思和設(shè)置問題锯蛀。知識小結(jié):
如果只有一張圖,拖進(jìn)Xcode中Assets.xcassets里次慢,會自動放入@1x的選項框內(nèi)旁涤。
在iPhone4及后面的機(jī)型,都是取@2x和@3x的迫像。那如果沒有@2x和@3x劈愚,會默認(rèn)選擇@1x,而且尺寸和原圖像素相同闻妓。
如果有@2x和@3x菌羽,得到的尺寸是原圖像素的一半。
所以UI給我的圖是750*6由缆,我只取到了它的前一部分的色值注祖。所以顏色沒有漸變猾蒂。
三、驗證猜想
為了驗證猜想是晨,我將圖設(shè)置為320*6肚菠,用的是iPhone5s進(jìn)行測試。完美罩缴!
此刻我的心情是激動的蚊逢,為了進(jìn)一步驗證我的猜想,我創(chuàng)建了兩張圖@2x和@3x箫章,圖的尺寸分別為750?×?626和1125?×?939烙荷。
問題完美解決。
由于代碼非常簡單焰薄,這里給一張漸變的圖拿诸,就放入下文了。
-------------------------------------------------------- 分割線 --------------------------------------------------
還有個東西忘記說了塞茅,就是設(shè)置設(shè)置導(dǎo)航欄底部陰影效果亩码。
系統(tǒng)有個方法是:setShadowImage
[self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"timg"]]; //這里的timg就是那張葉子圖
然后得到了下面這樣的效果。
初看時覺得這又是啥情況野瘦,它的UI結(jié)構(gòu)其實很簡單描沟,如下圖
由此可見,導(dǎo)航欄上所有的圖片設(shè)置鞭光,都是按照像素來平鋪的吏廉。
為了達(dá)到陰影效果,我在下面的UIImageView上加了一個view惰许,設(shè)置view的陰影席覆。
[self.navigationController.navigationBar setShadowImage:[UIImage new]]; //去除導(dǎo)航欄自帶陰影
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor blackColor]; //這個隨便設(shè)置什么顏色,切記不可設(shè)置為clearColor
view.frame = CGRectMake(0, -1, [UIScreen mainScreen].bounds.size.width, 1);
view.layer.shadowOpacity = 0.7; //不透明度
view.layer.shadowOffset = CGSizeMake(0, 3); //偏移距離
view.layer.shadowRadius = 5; //陰影半徑
[self.imgView addSubview: view];
最終效果: