在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網>源碼下載>通訊/手機編程>

iOS下拉放大上推縮小怎樣實現(xiàn)的

大小:0.52 MB 人氣: 2017-09-26 需要積分:1

  網上有很多類似的demo,但都是分開實現(xiàn)的,我把這兩個功能放到了一起,并且沒有使用AutoLayout,沒有用KVO,沒有用storyboard/xib。

  我將重點數(shù)字使用的宏定義,擴展性很強。

  先來看看效果吧

  

  實現(xiàn)思路:

  1. 創(chuàng)建頭部的視圖和tableview,需要注意的是tableview要設置contentInset,contentInsent 的頂部要和頭部視圖的背景圖的高度一樣,否則會有空隙(或是有遮擋)。

  myTableView.contentInset = UIEdgeInsetsMake(headRect.size.height-navHeight-navHeight, 0, 0, 0);

  2. 對頭部視圖的背景圖片的尺寸進行處理,當然,你也可以直接找一個適合尺寸的圖片,就不用處理圖片了,為了增加程序的擴展性,我就隨便選了張圖,并進行圖片尺寸處理。

  UIImage * image = [UIImage imageNamed:name];

  UIImage * newImg = [self image:image byScalingToSize:self.bounds.size];

  backgroundView.image = newImg;

  backgroundView.clipsToBounds = YES;//切掉圖片多余的部分

  //處理圖片方法

  - (UIImage *)image:(UIImage*)image byScalingToSize:(CGSize)targetSize {

  UIImage *sourceImage = image;

  UIImage *newImage = nil;

  UIGraphicsBeginImageContext(targetSize);

  CGRect thumbnailRect = CGRectZero;

  thumbnailRect.origin = CGPointZero;

  thumbnailRect.size.width = targetSize.width;

  thumbnailRect.size.height = targetSize.height;

  [sourceImage drawInRect:thumbnailRect];

  newImage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return newImage ;

  }

  3. 搞定了這些,準備工作就完成了,接下來,一個方法實現(xiàn)我們的下拉放大、上推縮小的功能,當然,重點和難點是邏輯,技術很easy。大家都知道UITableView是繼承UIScrollView的,利用UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView;來實現(xiàn)。

  下拉放大

  在這個方法中,我們將功能分為兩部分,一個是下拉放大,這個是比較容易的,就是對頭部視圖的背景圖進行放大,調整frame,需要注意的是在此需要調整圖片的顯示方式,因為下拉和上推中圖片顯示的方式是不同的,否則即使你調整了frame,也不會按frame來顯示的。

  _myView.backgroundView.contentMode = UIViewContentModeScaleToFill;

  _myView.backgroundView.frame = CGRectMake(offset_Y*0.5 , -navHeight, VCWidth - offset_Y, headRect.size.height - offset_Y);

  上推移動縮小

  這個就比較難理解了,當然,我說的是中間對frame的算法,我們將三個視圖分開說。

  背景圖:先切換顯示模式,然后將y隨著tableview偏移移動到0,高度也是隨著tableview偏移,最終移動到需要的高度(Demo留的是44)

  _myView.backgroundView.contentMode = UIViewContentModeTop;

  _myView.backgroundView.frame = CGRectMake(0 ,navHeight* offset_Y/(headRect.size.height-navHeight-navHeight)-navHeight; , VCWidth , headRect.size.height -(navHeight + navHeight* offset_Y/(headRect.size.height-navHeight-navHeight)-navHeight;) - offset_Y);

  頭像:頭像需要隨著tableview的偏移而移動自身的位置,并且還要進行縮小。這里面就是一個線性方程的關系,和上面的的背景圖是一樣的。

  CGFloat width = offset_Y*(40-(VCWidth / 4))/(headRect.size.height-navHeight-navHeight)+(VCWidth / 4);

  _myView.headView.frame =CGRectMake(0, 0, width,width);

  _myView.headView.layer.cornerRadius =width*0.5;

  _myView.headView.center = _myView.backgroundView.center;

  簽名:簽名比較簡單,只要跟著頭像動就行,然后再根據偏移調整自己的透明度就行了。

  _myView.signLabel.frame =CGRectMake(0, CGRectGetMaxY(_myView.headView.frame), VCWidth, 40);

  _myView.signLabel.alpha = 1 - (offset_Y*3 / (headRect.size.height-navHeight-navHeight) /2);

  然后就大功告成了。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?
      主站蜘蛛池模板: 手机看片福利日韩国产 | 国产伦精品一区二区三区女 | 乱高h亲女 | 一区二区三区四区视频在线 | 好爽毛片一区二区三区四区 | 国产黄色小视频 | 在线小视频你懂的 | 欧洲精品码一区二区三区免费看 | 国产情侣露脸 | 欧美性满足hd1819 | 亚洲视频黄 | 人人人人凹人人爽人人澡 | 人人看操 | 天天干天天干天天色 | 夜夜春夜夜爽 | 国产一级做a爱免费视频 | 日韩欧美卡通动漫在线观看 | 人人舔人人爱 | 天天插狠狠干 | 国产亚洲精品久久久极品美女 | 48pao强力打造免费基地 | 五月欧美激激激综合网色播 | 国产青青草 | 日本最黄| 在线你懂的网址 | 天天看天天碰 | 午夜影院黄色片 | 高颜值大长腿美女啪啪 | 午夜美女视频在线观看高清 | vr亚洲成年网址在线观看 | 狠狠色丁香久久综合网 | 一级不卡毛片免费 | 日本不卡免费新一区二区三区 | 成在线人视频免费视频 | 色爱区综合激月婷婷激情五月 | 亚洲天天做夜夜做天天欢人人 | 国产午夜在线视频 | 欧美性受xxxx | 男女爱爱爽爽福利免费视频 | 日本aaaa级片| 久久精品国产亚洲片 |