OC類似微信圖片展示工具

好久沒有更新艇拍,年齡越大人越懶罷,不廢話煞聪,上代碼

.h文件

////? ZJImageMagnification.h////? Created by apple on 2017/5/8.//? Copyright ? 2017年 apple. All rights reserved.//#import@interface ImageMagnification : NSObject/**

*? 瀏覽大圖

*

*? @param currentImageview 當前圖片

*? @param alpha? ? ? ? ? ? 背景透明度

*/

+(void)scanBigImageWithImageView:(UIImageView *)currentImageview alpha:(CGFloat)alpha;

@end


.m文件

////? ZJImageMagnification.m////? Created by apple on 2017/5/8.//? Copyright ? 2017年 apple. All rights reserved./*圖片放大*/#import "ImageMagnification.h"@implementation ImageMagnification//原始尺寸static CGRect oldframe;static CGRect newbounds;UIImageView *Imageview;float scale;/** *? 瀏覽大圖 * *? @param currentImageview 當前圖片 *? @param alpha? ? ? ? ? ? 背景透明度 */+(void)scanBigImageWithImageView:(UIImageView *)currentImageview alpha:(CGFloat)alpha {? ? //? 當前imageview的圖片? ? UIImage *image = currentImageview.image;? ? Imageview = currentImageview;? ? Imageview.hidden=YES;;? ? //? 當前視圖? ? UIWindow *window = [UIApplication sharedApplication].keyWindow;? ? //? 背景? ? UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];? ? //? 當前imageview的原始尺寸->將像素currentImageview.bounds由currentImageview.bounds所在視圖轉(zhuǎn)換到目標視圖window中,返回在目標視圖window中的像素值? ? oldframe = [currentImageview convertRect:currentImageview.bounds toView:window];? ? [backgroundView setBackgroundColor:[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:alpha]];? ? ? ? //? 此時視圖不會顯示? ? [backgroundView setAlpha:0];? ? //? 將所展示的imageView重新繪制在Window中? ? UIImageView *imageView = [[UIImageView alloc] initWithFrame:oldframe];? ? [imageView setImage:image];? ? imageView.contentMode =UIViewContentModeScaleAspectFit;? ? [imageView setTag:1024];? ? [backgroundView addSubview:imageView];? ? //? 將原始視圖添加到背景視圖中? ? [window addSubview:backgroundView];? ? ? ? ? ? //? 添加點擊事件同樣是類方法 -> 作用是再次點擊回到初始大小? ? UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideImageView:)];? ? [backgroundView addGestureRecognizer:tapGestureRecognizer];? ? ? ? // 添加拖動手勢? ? UIPanGestureRecognizer*PanGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panImageView:)];? ? [backgroundView addGestureRecognizer:PanGestureRecognizer];? ? ? ? //縮放手勢? ? UIPinchGestureRecognizer*PinchGestureRecognizer = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchImageView:)];? ? [backgroundView addGestureRecognizer:PinchGestureRecognizer];? ? scale=1;? ? ? ? //? 動畫放大所展示的ImageView? ? [UIView animateWithDuration:0.4 animations:^{? ? ? ? CGFloat y,width,height;? ? ? ? y = ([UIScreen mainScreen].bounds.size.height - image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width) * 0.5;? ? ? ? //寬度為屏幕寬度? ? ? ? width = [UIScreen mainScreen].bounds.size.width;? ? ? ? //高度 根據(jù)圖片寬高比設置? ? ? ? height = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;? ? ? ? [imageView setFrame:CGRectMake(0, y, width, height)];? ? ? ? newbounds=imageView.bounds;? ? ? ? //重要逝慧! 將視圖顯示出來? ? ? ? [backgroundView setAlpha:1];? ? } completion:^(BOOL finished) {? ? ? ? ? ? }];? ? }/** *? 縮放imageView * *? @param pinch 縮放事件 */+ (void)pinchImageView:(UIPinchGestureRecognizer *)pinch{? ? UIView *backgroundView = pinch.view;? ? //? 原始imageview? ? UIImageView *imageView = [backgroundView viewWithTag:1024];? ? if (pinch.state==UIGestureRecognizerStateEnded) {? ? ? ? if (imageView.bounds.size.width!=newbounds.size.width) {? ? ? ? ? ? [UIView animateWithDuration:.4 animations:^{? ? ? ? ? ? ? ? imageView.center=CGPointMake(SCREEN_WIDTH/2, SCREENH_HEIGHT/2);? ? ? ? ? ? ? ? imageView.bounds=newbounds;? ? ? ? ? ? }];? ? ? ? }? ? ? ? return;? ? }? ? if (pinch.state == UIGestureRecognizerStateBegan || pinch.state == UIGestureRecognizerStateChanged) {? ? ? ? if (imageView.bounds.size.width*pinch.scale將背景視圖刪掉

Imageview.hidden=NO;

[UIView transitionWithView:Imageview duration:.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:nil];

[backgroundView removeFromSuperview];

}];

}

return;

}

//返回在橫坐標上昔脯、縱坐標上拖動了多少像素

CGPoint point=[pan translationInView:backgroundView];

[UIView animateWithDuration:.1 animations:^{

imageView.center=CGPointMake(imageView.center.x+point.x, imageView.center.y+point.y);

if (imageView.center.y>SCREENH_HEIGHT/2) {

float alpha=(SCREENH_HEIGHT-imageView.center.y)/SCREENH_HEIGHT*2;

[backgroundView setAlpha:alpha];

imageView.bounds=CGRectMake(0, 0, oldframe.size.width+(newbounds.size.width-oldframe.size.width)*alpha, oldframe.size.height+(newbounds.size.height-oldframe.size.height)*alpha);

}else{

backgroundView.alpha=1;

imageView.bounds=newbounds;

}

}];

//拖動完之后,每次都要用setTranslation:方法制0這樣才不至于不受控制般滑動出視圖

[pan setTranslation:CGPointMake(0, 0) inView:backgroundView];

}

/**

*? 恢復imageView原始尺寸

*

*? @param tap 點擊事件

*/

+(void)hideImageView:(UITapGestureRecognizer *)tap{

UIView *backgroundView = tap.view;

//? 原始imageview

UIImageView *imageView = [tap.view viewWithTag:1024];

//? 恢復

[UIView animateWithDuration:0.4 animations:^{

[imageView setFrame:oldframe];

[backgroundView setAlpha:0];

} completion:^(BOOL finished) {

//完成后操作->將背景視圖刪掉

Imageview.hidden=NO;

[UIView transitionWithView:Imageview duration:.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:nil];

[backgroundView removeFromSuperview];

}];

}

@end

從入門到想放棄iOS笛臣,話說做這一行已經(jīng)4年云稚,從當初的實在沒辦法找工作學oc到現(xiàn)在一天不碰代碼就失眠,從沒有系統(tǒng)的學過iOS沈堡,感覺好可惜静陈,自己一點點摸索雖然成長的蠻快,但是真的很艱苦诞丽,希望能夠在簡書找到志同道合的朋友鲸拥,讓我們一起越走越遠。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僧免,一起剝皮案震驚了整個濱河市刑赶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懂衩,老刑警劉巖撞叨,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浊洞,居然都是意外死亡牵敷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門沛申,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劣领,“玉大人,你說我怎么就攤上這事铁材〖馓裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵著觉,是天一觀的道長村生。 經(jīng)常有香客問我,道長饼丘,這世上最難降的妖魔是什么趁桃? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上卫病,老公的妹妹穿的比我還像新娘油啤。我一直安慰自己,他們只是感情好蟀苛,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布益咬。 她就那樣靜靜地躺著,像睡著了一般帜平。 火紅的嫁衣襯著肌膚如雪幽告。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天裆甩,我揣著相機與錄音冗锁,去河邊找鬼。 笑死嗤栓,一個胖子當著我的面吹牛冻河,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抛腕,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼芋绸,長吁一口氣:“原來是場噩夢啊……” “哼媒殉!你這毒婦竟也來了担敌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廷蓉,失蹤者是張志新(化名)和其女友劉穎全封,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桃犬,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡刹悴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攒暇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土匀。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖形用,靈堂內(nèi)的尸體忽然破棺而出就轧,到底是詐尸還是另有隱情,我是刑警寧澤田度,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布妒御,位于F島的核電站,受9級特大地震影響镇饺,放射性物質(zhì)發(fā)生泄漏乎莉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惋啃。 院中可真熱鬧哼鬓,春花似錦、人聲如沸边灭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽存筏。三九已至宠互,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椭坚,已是汗流浹背予跌。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留善茎,地道東北人券册。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像垂涯,于是被迫代替她去往敵國和親烁焙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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

  • 在iOS中隨處都可以看到絢麗的動畫效果耕赘,實現(xiàn)這些動畫的過程并不復雜骄蝇,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,113評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果操骡,實現(xiàn)這些動畫的過程并不復雜九火,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,495評論 6 30
  • 小時候虑鼎,我們常常會憧憬自己長大后的模樣:我們會在心里對自己說:等我長大了,我要做飛行員键痛、我要當科學家炫彩,我要成為運動...
    青鳥的天空727閱讀 420評論 4 3
  • 過年的緣由:因為相傳年獸怕紅色戚丸,怕火光和怕響聲划址,所以人們便有貼春聯(lián)扔嵌、放鞭炮、敲鑼打鼓等習俗夺颤,不同時期痢缎、不同地區(qū)、不...
    每周微課閱讀 240評論 0 1