iOS7 下使用UITapGestureRecognizer 实现图片放大缩小的原理(自创)

关于在IOS7下实现点击UIImageView是实现放大图片的原理(完全是自己参考其他的文脏,自己总结出来的,如有雷同,那咱就是心有灵犀啦)

我这里的情况是,在UITableView中的UITableviewCell中使用UIImageView,UIImageView是放在cell中的。这里的实现代码如下

NSString *imagepath = [[NSBundle mainBundle] pathForResource:@"girl"
                                                      ofType:@"jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:imagepath];


GBPathImageView *headImageView = [[GBPathImageView alloc] initWithFrame:CGRectMake(imageX,
                                                                                   imageY,
                                                                                   imageWidth,
                                                                                   imageHeight)
                                                                  image:image
                                                               pathType:GBPathImageViewTypeCircle
                                                              pathColor:[UIColor whiteColor]
                                                            borderColor:[UIColor whiteColor]
                                                              pathWidth:1.0];
headImageView.userInteractionEnabled = YES;
headImageView.multipleTouchEnabled = YES;
headImageView.tag = row;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(showBigImage:)];
tap.view.tag= (int)headImageView.image;
tap.delegate = self;
[headImageView addGestureRecognizer:tap];

[cell.contentView addSubview:headImageView];

这里就是使用了UITapGestureRecognizer,添加了排击的事件。

注意点:

  • 第一点:UIImageview的userInteractionEnabled和multipleTouchEnabled的设置,不然不起作用
  • 第二点:代理UIGestureRecognizerDelegate的引入
  • 第三点:tag的使用,这个是为了后面的操作,主要是因为加了tag我们就会知道是哪个UIImageView被点击了,从而做一些其他的处理。

那么关于方法图片和缩小图片的方法如下:

放大图片的代码:

-(void) showBigImage:(id)sender
{
    UITapGestureRecognizer *tap = (UITapGestureRecognizer*)sender;
    NSLog(@"tag = %d",tap.view.tag);
    
    UIImageView *imageViewer=[[UIImageView alloc] init];
    UITapGestureRecognizer *closeTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(hideBigImage:)];
    closeTap.delegate = self;
    imageViewer.multipleTouchEnabled = YES;
    imageViewer.userInteractionEnabled = YES;
    [imageViewer addGestureRecognizer:closeTap];
    imageViewer.animationDuration = 2.0;
    imageViewer.animationRepeatCount = 1;
    [imageViewer setFrame:CGRectMake(0.0,
                                     _tableview.frame.origin.y,
                                     _tableview.frame.size.width,
                                     _tableview.frame.size.height)];
    [imageViewer startAnimating];
    NSString *imagepath = [[NSBundle mainBundle] pathForResource:@"girl"
                                                          ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:imagepath];
    [imageViewer setImage:image];
    UIWindow *mainWindow=[UIApplication sharedApplication].delegate.window;
    [mainWindow.rootViewController.view addSubview:imageViewer];
}

缩小图片的方法:

-(void) hideBigImage:(id)sender
{
    UITapGestureRecognizer *tap = (UITapGestureRecognizer*)sender;
    [tap.view removeFromSuperview];
}

大概的原理全在代码中了,如何放大图片,如何做出图片更加好的效果,这个是后面优化要做的。

参考文章:

CC BY-NC-ND 4.0