iOS 點(diǎn)擊放大圖片

這是封裝的一個(gè)UITapGestureRecognizer呀袱,這里記錄一下

主要思路

點(diǎn)擊圖片的時(shí)候洛口,首先在window的keywindow上面再創(chuàng)建一個(gè)view慌烧,然后把圖片等比例放大炫乓,放到上面冀墨,然后操作捏合闸衫,移動(dòng)

UIWindow * window = [UIApplication sharedApplication].keyWindow;
    backView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, windowWidth, windowHeight)];
    backView.backgroundColor = [UIColor blackColor];
    backView.alpha = 0;
    [window addSubview:backView];
    
    UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideBackView)];
    [backView addGestureRecognizer:tap];
    
    UIImageView * backImageView = (UIImageView *)self.view;
    oldRect = backImageView.frame;
    
    UIImageView * showImageView = [[UIImageView alloc]initWithFrame:[self.view convertRect:self.view.bounds toView:window]];
    showImageView.image = backImageView.image;
    showImageView.tag = 190231;
    showImageView.userInteractionEnabled = YES;
    [backView addSubview:showImageView];
    
    //縮放手勢(shì)
    UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
    [showImageView addGestureRecognizer:pinch];
    
    //移動(dòng)手勢(shì)
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    [showImageView addGestureRecognizer:pan];
//放大圖片的主要代碼
    [UIView animateWithDuration:0.3 animations:^{
      showImageView.frame = CGRectMake(0,(windowHeight - backImageView.image.size.height * windowWidth / backImageView.image.size.width) / 2, windowWidth, backImageView.image.size.height * windowWidth / backImageView.image.size.width);
        backView.alpha = 1;
        newRect = showImageView.frame;
    }];

下面是手勢(shì)完成的主要操作

縮放手勢(shì)這里關(guān)鍵是找到放大的比例,首先要理清楚要放大的倍數(shù)是多少,如果直接使用sender.scale 這樣就是在前一次放大的基礎(chǔ)上诽嘉,再次放大那么多倍蔚出,而我們實(shí)際要的效果是在前一次放大的基礎(chǔ)上弟翘,再放大移動(dòng)的數(shù)值,所以每次手指移動(dòng)放大的倍數(shù)應(yīng)該是上次的sender.scale值減去當(dāng)前的sender.scale

    UIImageView * showImageView = (UIImageView *)[backView viewWithTag:190231];
   if (sender.state == UIGestureRecognizerStateBegan) {
       pinchChangeValue = 1;
       return;
   }
   CGFloat change = 1 - (pinchChangeValue - sender.scale);
   showImageView.transform = CGAffineTransformScale(showImageView.transform, change, change);
   //記錄當(dāng)前比例
   pinchChangeValue = sender.scale;

移動(dòng)手勢(shì)

   //這里和縮放差不多相同的原理
    if (sender.state == UIGestureRecognizerStateBegan) {
        panChangeValueOld = sender.view.center;
        return;
    }
    if (sender.state == UIGestureRecognizerStateChanged) {
        CGPoint translation = [sender translationInView:self.view];
        float newY = panChangeValueOld.y + translation.y;
        float newX = panChangeValueOld.x + translation.x;
        sender.view.center = CGPointMake(newX, newY);
    }

最后是點(diǎn)擊收起圖片:
這里要處理兩次的隱藏骄酗,點(diǎn)擊的時(shí)候判斷圖片是否被放大了稀余,如果被縮放手勢(shì)放大的話,先變?yōu)辄c(diǎn)擊放大后的尺寸趋翻,再變?yōu)樵瘸叽缇α眨绻麤]有被縮放手勢(shì)放大,則直接變?yōu)樵瓉沓叽?/p>

    UIImageView * showImageView = (UIImageView *)[backView viewWithTag:190231];
    if (showImageView.frame.size.width > newRect.size.width) {
        [UIView animateWithDuration:0.3 animations:^{
            showImageView.frame = newRect;
        }];
    }else{
        [UIView animateWithDuration:0.3 animations:^{
            showImageView.frame = oldRect;
            backView.alpha = 0;
        } completion:^(BOOL finished) {
            [backView removeFromSuperview];
        }];
    }

本次練習(xí)的demo的地址:demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踏烙,一起剝皮案震驚了整個(gè)濱河市师骗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讨惩,老刑警劉巖辟癌,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荐捻,居然都是意外死亡黍少,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門处面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂置,“玉大人,你說我怎么就攤上這事鸳君∨┰ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵或颊,是天一觀的道長(zhǎng)砸紊。 經(jīng)常有香客問我,道長(zhǎng)囱挑,這世上最難降的妖魔是什么醉顽? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮平挑,結(jié)果婚禮上游添,老公的妹妹穿的比我還像新娘。我一直安慰自己通熄,他們只是感情好唆涝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唇辨,像睡著了一般廊酣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赏枚,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天亡驰,我揣著相機(jī)與錄音晓猛,去河邊找鬼。 笑死凡辱,一個(gè)胖子當(dāng)著我的面吹牛戒职,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播透乾,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼洪燥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了续徽?” 一聲冷哼從身側(cè)響起蚓曼,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钦扭,沒想到半個(gè)月后纫版,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客情,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年其弊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膀斋。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梭伐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仰担,到底是詐尸還是另有隱情糊识,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布摔蓝,位于F島的核電站赂苗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贮尉。R本人自食惡果不足惜拌滋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜谚。 院中可真熱鬧败砂,春花似錦、人聲如沸魏铅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽览芳。三九已至斜姥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疾渴。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屯仗,地道東北人搞坝。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像魁袜,于是被迫代替她去往敵國(guó)和親桩撮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • 手勢(shì)圖片控件 PinchImageView 點(diǎn)擊圖片框架 photoView packagecom.example...
    Ztufu閱讀 720評(píng)論 0 1
  • //我所經(jīng)歷的大數(shù)據(jù)平臺(tái)發(fā)展史(三):互聯(lián)網(wǎng)時(shí)代 ? 上篇http://www.infoq.com/cn/arti...
    葡萄喃喃囈語閱讀 51,199評(píng)論 10 200
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)峰弹、插件店量、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 文丨雪花如糖 不知從哪天開始,突然有了一種奇怪的感覺鞠呈,這個(gè)城市的空氣中飄浮著我的氣息融师,它游離在街道上,地鐵口蚁吝,商場(chǎng)...
    雪花如糖閱讀 3,015評(píng)論 113 95
  • 團(tuán)隊(duì)旱爆,細(xì)節(jié)。直播結(jié)束了窘茁,開創(chuàng)了保山廣電史上的又一個(gè)第一怀伦。人代會(huì)閉幕,我說了句話山林,我們的兩會(huì)報(bào)道畫上了句號(hào)房待。但這個(gè)句...
    旭日東升_814c閱讀 177評(píng)論 0 0