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所在视图转换到目标视图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;        //高度 根据图片宽高比设置        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,话说做这一行已经4年,从当初的实在没办法找工作学oc到现在一天不碰代码就失眠,从没有系统的学过iOS,感觉好可惜,自己一点点摸索虽然成长的蛮快,但是真的很艰苦,希望能够在简书找到志同道合的朋友,让我们一起越走越远。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,075评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,431评论 6 30
  • 小时候,我们常常会憧憬自己长大后的模样:我们会在心里对自己说:等我长大了,我要做飞行员、我要当科学家,我要成为运动...
    青鸟的天空727阅读 409评论 4 3
  • 过年的缘由:因为相传年兽怕红色,怕火光和怕响声,所以人们便有贴春联、放鞭炮、敲锣打鼓等习俗,不同时期、不同地区、不...
    每周微课阅读 235评论 0 1