1、navigationBar的透明問(wèn)題
如果僅僅把navigationBar的alpha設(shè)為0的話,那就相當(dāng)于把navigationBar給隱藏了,大家都知道,父視圖的alpha設(shè)置為0的話,那么子視圖全都會(huì)透明的。那么相應(yīng)的navigationBar的標(biāo)題和左右兩個(gè)按鈕都會(huì)消失。這樣顯然達(dá)不到我們要求的效果。
(1)如果僅僅是想要navigationBar透明,按鈕和標(biāo)題都在可以使用以下方法:
forBarMetrics:UIBarMetricsDefault];//給navigationBar```
設(shè)置一個(gè)空的背景圖片即可實(shí)現(xiàn)透明,而且標(biāo)題按鈕都在
細(xì)心的你會(huì)發(fā)現(xiàn)上面有一條線:
這就需要我們做進(jìn)一步處理,把線去掉,如下方法即可:
```self.navigationController.navigationBar.shadowImage = [UIImage new];//其實(shí)這個(gè)線也是image控制的。設(shè)為空即可```
(2)如果你想在透明的基礎(chǔ)上實(shí)現(xiàn)根據(jù)下拉距離,由透明變得不透明的效果,那么上面那個(gè)就顯得力不從心了,這就需要我們采用另外一種方法了
//navigationBar是一個(gè)復(fù)合視圖,它是有許多個(gè)控件組成的,那么我們就可以從他的內(nèi)部入手
```[[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = 0;//這里可以根據(jù)scrollView的偏移量來(lái)設(shè)置alpha就實(shí)現(xiàn)了漸變透明的效果```
###2、navigationBar隱藏顯示的過(guò)度
一個(gè)頁(yè)面隱藏navigationBar,另一個(gè)不隱藏。兩個(gè)頁(yè)面進(jìn)行push和pop的時(shí)候,尤其是有側(cè)滑手勢(shì)返回的時(shí)候,不做處理就會(huì)造成滑動(dòng)返回時(shí),navigationBar位置是空的,直接顯示一個(gè)黑色或者顯示下面一層視圖,很難看。這就需要我們加入過(guò)度動(dòng)畫(huà)來(lái)隱藏或顯示navigationBar:
在返回后將要出現(xiàn)的頁(yè)面實(shí)現(xiàn)viewWillAppear方法,需要隱藏就設(shè)為YES,需要顯示就設(shè)為NO
```- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}```
###3、圖片處理只拿到圖片的一部分
```UIImage *image = [UIImage imageNamed:filename];
CGImageRef imageRef = image.CGImage;
CGRect rect = CGRectMake(origin.x, origin.y ,size.width, size.height);
//這里的寬高是相對(duì)于圖片的真實(shí)大小
//比如你的圖片是400x400的那么(0,0,400,400)就是圖片的全尺寸,想取哪一部分就設(shè)置相應(yīng)坐標(biāo)即可
CGImageRef imageRefRect = CGImageCreateWithImageInRect(imageRef, rect);
UIImage *imageRect = [[UIImage alloc] initWithCGImage:imageRefRect];```