最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實(shí)現(xiàn)簡(jiǎn)單的頭部縮放功能

 更新時(shí)間:2018年08月22日 10:13:24   作者:yyuuzhu  
這篇文章主要介紹了iOS 簡(jiǎn)單的頭部縮放效果,頭部伴隨模糊效果放大縮小,并在一定位置時(shí)懸停充當(dāng)導(dǎo)航欄,本文給大家提供實(shí)現(xiàn)思路,需要的朋友可以參考下

本文通過(guò)實(shí)例代碼給大家介紹了iOS實(shí)現(xiàn)簡(jiǎn)單的頭部縮放功能。實(shí)現(xiàn)思路有頭部視圖,滾動(dòng)視圖,控制頭部動(dòng)畫(huà)等多個(gè)示例代碼塊,大家可以參考下本文。

簡(jiǎn)單實(shí)現(xiàn)并集成一個(gè)頭部縮放的功能,適用于UIScrollView以及其子類。

頭部伴隨模糊效果放大縮小,并在一定位置時(shí)懸停充當(dāng)導(dǎo)航欄。這里提供實(shí)現(xiàn)思路,如有符合可直接使用。

效果如下圖。

 

實(shí)現(xiàn):

首先分解為兩部分,一部分為頭部視圖,一部分為滾動(dòng)視圖。頭部視圖負(fù)責(zé)展示,滾動(dòng)視圖負(fù)責(zé)控制頭部視圖如何展示,比如放大和縮小。

一:頭部視圖

頭部視圖拆解為負(fù)責(zé)展示圖片的UIImageView,負(fù)責(zé)模糊效果的UIVisualEffectView,負(fù)責(zé)標(biāo)題顯示的UILabel,以及返回等功能按鈕的UIButton。

進(jìn)一步分析,模糊效果的視圖應(yīng)該和展示圖片的視圖做同樣的處理,同樣的縮放,為了更好的控制將其包裝到一containView中。跟據(jù)滾動(dòng)的位置改變containView的大小,模糊視圖根據(jù)滾動(dòng)的位置改變模糊的程度。標(biāo)題視圖在滾動(dòng)視圖到達(dá)一定位置時(shí)出現(xiàn)并停在那里。這里利用UIImageView的特性,改變它的contentMode為UIViewContentModeScaleAspectFill,這樣只用簡(jiǎn)單的改變圖片視圖的高度時(shí)就能營(yíng)造放大縮小的效果了。

UIImageView部分代碼

_blurImageView = [[UIImageView alloc] init];
_blurImageView.clipsToBounds = YES;
_blurImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
_blurImageView.contentMode = UIViewContentModeScaleAspectFill;
[self addSubview:_blurImageView];

UIVisualEffectView部分代碼

UIBlurEffect *beffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
 _imageEffectView = [[UIVisualEffectView alloc]initWithEffect:beffect];
 _imageEffectView.alpha = 0;
_imageEffectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
 [self addSubview:_imageEffectView];

二:滾動(dòng)視圖

滾動(dòng)視圖需要做的就是設(shè)置 contentInset ,讓出一部分空間給頭部視圖。這里如果將頭部視圖直接加到滾動(dòng)視圖上,無(wú)法做到頭部視圖最后懸停在一定位置,因此直接加到和滾動(dòng)視圖同級(jí)就行。

示例代碼

self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, kWindowWidth, kWindowHeight)];
  self.webView.backgroundColor = [UIColor clearColor];
  [self.view addSubview:self.webView];
  NSURL * url = [NSURL URLWithString:@"https://yongliangp.github.io/"];
  NSMutableURLRequest *re = [NSMutableURLRequest requestWithURL:url];
  [self.webView loadRequest:re];
  //初始化header
  self.headerView.headerImage = [UIImage imageNamed:@"saber.jpeg"];
  self.headerView.tittle = @"哈哈是個(gè)demo";
  self.headerView.isShowLeftButton = YES;
  self.headerView.isShowRightButton = YES;
  __weak typeof(self) weakSelf = self;
  self.headerView.leftClickBlock = ^(UIButton *btn){
    [weakSelf.navigationController popViewControllerAnimated:YES];
  };
  self.headerView.rightClickBlock = ^(UIButton *btn){
    NSLog(@"點(diǎn)擊了分享");
  };
  [self.webView.scrollView handleSpringHeadView:self.headerView];

三:控制頭部動(dòng)畫(huà)

和其他的滾動(dòng)視圖做動(dòng)畫(huà)一樣,實(shí)現(xiàn)滾動(dòng)視圖的代理方法scrollViewDidScroll,獲取偏移量,然后根據(jù)一定的規(guī)則做動(dòng)畫(huà),這里為了解耦,也為了復(fù)用,使用了在scrollView的分類中監(jiān)聽(tīng)scrollView的contentOffset方法去實(shí)現(xiàn)動(dòng)畫(huà)控制。

首先確定兩個(gè)臨界點(diǎn): 視圖的初始高度 懸停的高度。

示例代碼(簡(jiǎn)單控制)

- (void)yl_scrollViewDidScroll:(UIScrollView *)scrollView
{
  CGFloat offsetY = scrollView.contentOffset.y;
  if (offsetY>=-kNavHeight)
  {
    offsetY=-kNavHeight;
    if (self.headerView.frame.size.height!=kNavHeight)
    {
      self.headerView.frame = CGRectMake(0, 0, self.headerView.bounds.size.width, kNavHeight);
      [UIView animateWithDuration:0.25 animations:^{
        self.titleLabel.frame = CGRectMake(35, 20, self.bounds.size.width-35*2, 44);
        self.titleLabel.alpha = 1;
      }];
    }
  }else
  {
    self.headerView.frame = CGRectMake(0, 0, self.headerView.bounds.size.width, -offsetY);
    if (self.titleLabel.alpha!=0)
    {
      [UIView animateWithDuration:0.25 animations:^{
        self.titleLabel.frame = CGRectMake(35, 40, self.bounds.size.width-35*2, 44);
        self.titleLabel.alpha = 0;
      }];
    }
  }
  CGFloat alpha ;
  if (self.headerView.frame.size.height>=kWindowWidth/2)
  {
    alpha = 0;
  }else
  {
    alpha = 1-((self.headerView.frame.size.height-kNavHeight)/(kWindowWidth/2-kNavHeight));
  }
  if (alpha>=0&α<=1)
  {
    self.headerEffectView.alpha = alpha;
  }
}

最重要的,記得在控制器dealloc時(shí)移除監(jiān)聽(tīng)者
最重要的,記得在控制器dealloc時(shí)移除監(jiān)聽(tīng)者
最重要的,記得在控制器dealloc時(shí)移除監(jiān)聽(tīng)者

或者你有更好的方式移除監(jiān)聽(tīng)者請(qǐng)告訴我。

照例放Demo,僅供參考,如有問(wèn)題請(qǐng)留言

Demo地址:

https://github.com/yongliangP/YLSpringHeader 用心良苦請(qǐng) star

總結(jié)

以上所述是小編給大家介紹的iOS實(shí)現(xiàn)簡(jiǎn)單的頭部縮放功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

南靖县| 蒙自县| 邯郸县| 贵州省| 德江县| 汤原县| 陆川县| 广饶县| 繁昌县| 衡东县| 抚远县| 获嘉县| 博客| 册亨县| 香港| 贵定县| 塔河县| 河北区| 本溪市| 石狮市| 饶平县| 合江县| 大埔区| 江华| 包头市| 丹阳市| 诏安县| 荥阳市| 黄冈市| 唐海县| 葫芦岛市| 固原市| 西安市| 广宗县| 米泉市| 保靖县| 建瓯市| 博野县| 瓮安县| 武川县| 益阳市|