中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在iOS中實現頭部縮放功能

發布時間:2021-05-22 16:56:18 來源:億速云 閱讀:203 作者:Leah 欄目:移動開發

這篇文章將為大家詳細講解有關怎么在iOS中實現頭部縮放功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一:頭部視圖

頭部視圖拆解為負責展示圖片的UIImageView,負責模糊效果的UIVisualEffectView,負責標題顯示的UILabel,以及返回等功能按鈕的UIButton。

進一步分析,模糊效果的視圖應該和展示圖片的視圖做同樣的處理,同樣的縮放,為了更好的控制將其包裝到一containView中。跟據滾動的位置改變containView的大小,模糊視圖根據滾動的位置改變模糊的程度。標題視圖在滾動視圖到達一定位置時出現并停在那里。這里利用UIImageView的特性,改變它的contentMode為UIViewContentModeScaleAspectFill,這樣只用簡單的改變圖片視圖的高度時就能營造放大縮小的效果了。

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];

二:滾動視圖

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

示例代碼

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 = @"哈哈是個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(@"點擊了分享");
  };
  [self.webView.scrollView handleSpringHeadView:self.headerView];

三:控制頭部動畫

和其他的滾動視圖做動畫一樣,實現滾動視圖的代理方法scrollViewDidScroll,獲取偏移量,然后根據一定的規則做動畫,這里為了解耦,也為了復用,使用了在scrollView的分類中監聽scrollView的contentOffset方法去實現動畫控制。

首先確定兩個臨界點: 視圖的初始高度 懸停的高度。

示例代碼(簡單控制)

- (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;
  }
}

關于怎么在iOS中實現頭部縮放功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

崇阳县| 稷山县| 鹤峰县| 运城市| 淳安县| 卢湾区| 都昌县| 临颍县| 于都县| 皮山县| 贡嘎县| 贵阳市| 邵阳市| 都昌县| 阜城县| 裕民县| 安福县| 兴文县| 龙岩市| 黔西| 湖口县| 习水县| 宝清县| 洛扎县| 乌鲁木齐县| 济宁市| 枣庄市| 永修县| 茂名市| 建始县| 诏安县| 东至县| 上高县| 镶黄旗| 西吉县| 华阴市| 志丹县| 枝江市| 静海县| 松潘县| 万荣县|