下拉放大的二種實(shí)現(xiàn)思路

下拉放大的效果在很多電商類網(wǎng)站上都有應(yīng)用,一般的情況是在tableView的最頂端放置1個(gè)UIView 或者UIScrollView控件,在tableView向下拖拽的時(shí)候,圖片會(huì)從中心點(diǎn)向下產(chǎn)生放大的效果.下面就說(shuō)一下兩種效果略有不同 下拉放大效果的實(shí)現(xiàn)思路.備查.
兩種下拉放大的實(shí)現(xiàn)思路:
第一種
首先在tableView的聲明1個(gè)屬性就是頂部的那個(gè)需要放大的imageView

#import "GZDTableViewController.h"
@interface GZDTableViewController ()
//頂部需要放大的View
@property (weak,nonatomic) UIImageView *topView;
@end
@implementation GZDTableViewController

在ViewDidLoad方法中加載這個(gè)view

- (void)viewDidLoad {
    [super viewDidLoad];
 //加載圖片
    UIImage *foodImage = [UIImage imageNamed:@"food"];
  //通過(guò)圖片創(chuàng)建imageView
    UIImageView *topView = [[UIImageView alloc] initWithImage:foodImage];
  //設(shè)置圖片的填充模式
  //等比例縮放,圖片不會(huì)變形.填充整個(gè)父控件
    topView.contentMode = UIViewContentModeScaleAspectFill;
//設(shè)置頂部View的frame 
    topView.frame = CGRectMake(0, -foodImage.size.height, foodImage.size.width, foodImage.size.height);
    //為了不擋住tableView的cell內(nèi)容所以將頂部的View插入到最下面的一層.
        [self.tableView insertSubview:topView atIndex:0];
//給屬性賦值
    self.topView = topView;
    //設(shè)置tableView 的內(nèi)邊距 這樣頂部的view 就能夠完全的展示出來(lái),不會(huì)擋住cell.
    self.tableView.contentInset = UIEdgeInsetsMake(foodImage.size.height , 0, 0, 0);
}

tableView 繼承自scrollView ,實(shí)現(xiàn)scrollView的代理方法監(jiān)聽(tīng)手指的拖拽

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //由于scrollView 向下拖拽的contentOffset.y的值是負(fù)數(shù).并且設(shè)置了contentInsets,這里這樣設(shè)置可以將offset的初始值設(shè)置為0,下拉時(shí)為正數(shù),方便判斷.
        CGFloat offset = -(scrollView.contentOffset.y + self.topView.image.size.height);
   //image的寬高比
        CGFloat scale = self.topView.image.size.width / self.topView.image.size.height;
    //如果是向上拖動(dòng) 返回.
        if (offset < 0) return;
//取出topView的frame
        CGRect frame = self.topView.frame;
//x值向左邊移動(dòng)-offset的距離
        frame.origin.x = -offset;
//由于在viewDidLoad方法中設(shè)置了topView 的圖片填充模式,所以寬度拉伸之后,高度也會(huì)相應(yīng)的拉伸.
    frame.size.width =(self.topView.image.size.height +2*offset) *scale;
    //重新賦值
        self.topView.frame = frame;

最后實(shí)現(xiàn)效果

basic.gif

另外一種效果是頂部的圖片顯示一半,在下拉的時(shí)候緩慢的將圖片頂部沒(méi)有顯示出來(lái)的部分 顯示出來(lái),并且放大,代碼更加簡(jiǎn)單
同樣的項(xiàng)目
在ViewDidLoad方法中將tableView的內(nèi)邊距設(shè)置只有圖片大小的一半

    #warning 這里的frame值 修改到只顯示一半
 self.tableView.contentInset = UIEdgeInsetsMake(foodImage.size.height *0.5 , 0, 0, 0);

在scrollView的代理方法中

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    
#warning 由于contentInset設(shè)置的是圖片高度的一半,所以此處也設(shè)置為一半的高度
        CGFloat offset = -(scrollView.contentOffset.y +   self.topView.image.size.height *0.5);
        if (offset < 0) return;
//改變topView的frame
        CGRect frame = self.topView.frame;
//因?yàn)樵O(shè)置了topView的填充模式,所以只修改topView的高度就可以實(shí)現(xiàn)效果,寬度會(huì)等比例自適應(yīng),并且保證圖片的中心始終在父控件的中心顯示.
frame.size.height = self.topView.image.size.height + offset;
        self.topView.frame = frame;

最終效果

1.gif

這種方式更加簡(jiǎn)單,但是一般頂端圖片的大小都僅僅占據(jù)頂部的一小塊區(qū)域,使用這種方式加載的圖片只要用戶手指拖拽的夠久 就能夠看到最后面的背景.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萄喳,一起剝皮案震驚了整個(gè)濱河市懊蒸,隨后出現(xiàn)的幾起案子笔呀,更是在濱河造成了極大的恐慌求冷,老刑警劉巖罕邀,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玄呛,死亡現(xiàn)場(chǎng)離奇詭異诬留,居然都是意外死亡揩环,警方通過(guò)查閱死者的電腦和手機(jī)搔弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)检盼,“玉大人肯污,你說(shuō)我怎么就攤上這事《滞鳎” “怎么了蹦渣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)貌亭。 經(jīng)常有香客問(wèn)我柬唯,道長(zhǎng),這世上最難降的妖魔是什么圃庭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任锄奢,我火速辦了婚禮,結(jié)果婚禮上剧腻,老公的妹妹穿的比我還像新娘拘央。我一直安慰自己,他們只是感情好书在,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布灰伟。 她就那樣靜靜地躺著,像睡著了一般儒旬。 火紅的嫁衣襯著肌膚如雪栏账。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天栈源,我揣著相機(jī)與錄音挡爵,去河邊找鬼。 笑死甚垦,一個(gè)胖子當(dāng)著我的面吹牛茶鹃,可吹牛的內(nèi)容都是我干的涣雕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼前计,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胞谭!你這毒婦竟也來(lái)了垃杖?” 一聲冷哼從身側(cè)響起男杈,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎调俘,沒(méi)想到半個(gè)月后伶棒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彩库,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年肤无,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇钦。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宛渐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眯搭,到底是詐尸還是另有隱情窥翩,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布鳞仙,位于F島的核電站寇蚊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棍好。R本人自食惡果不足惜仗岸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望借笙。 院中可真熱鬧扒怖,春花似錦、人聲如沸业稼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盼忌。三九已至积糯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谦纱,已是汗流浹背看成。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跨嘉,地道東北人川慌。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梦重。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兑燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件琴拧、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 昨天剛剛說(shuō)了要注意本周隨時(shí)可能出現(xiàn)逼空行情的出現(xiàn)降瞳,今天就出現(xiàn)了券商啟動(dòng)了逼空行情,直接逼至我們的第一個(gè)壓力位337...
    宣繼游閱讀 111評(píng)論 0 0
  • 四年前蚓胸,有個(gè)擁有笨拙溫柔的男生挣饥,因?yàn)楹ε缕渌非笳邐Z去他夢(mèng)寐以求的女神,他決定拼死一搏沛膳,將他電腦里50多G的小電影...
    文藝青年大怪獸閱讀 556評(píng)論 0 0
  • 孩提時(shí)扔枫,姥姥那一輩子很多人的思想,是認(rèn)為女娃長(zhǎng)大后總有一天要嫁人锹安,生兒育女短荐,無(wú)須讀太多書(shū)。在她們認(rèn)為叹哭,女性...
    媛美人生閱讀 284評(píng)論 0 0