[iOS]手势操作实现图片的缩放

原创 2013年12月05日 17:08:13

首先引入一个h文件和m文件,用来做图片缩放的view。

MRZoomScrollView.h

//
//  MRZoomScrollView
//  PhoneFax
//
//  Created by WHY on 13-12-3.
//  Copyright (c) 2013年 WHY. All rights reserved.
//
#import <UIKit/UIKit.h>


@interface MRZoomScrollView : UIScrollView <UIScrollViewDelegate>
{
    UIImageView *imageView;
}

@property (nonatomic, strong) UIImageView *imageView;


@end

MRZoomScrollView.m

#import "MRZoomScrollView.h"

#define MRScreenWidth      CGRectGetWidth([UIScreen mainScreen].applicationFrame)
#define MRScreenHeight     CGRectGetHeight([UIScreen mainScreen].applicationFrame)

@interface MRZoomScrollView (Utility)

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center;

@end

@implementation MRZoomScrollView

@synthesize imageView;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        self.delegate = self;
        self.frame = CGRectMake(0, 0, MRScreenWidth, MRScreenHeight);
        
        [self initImageView];
    }
    return self;
}

- (void)initImageView
{
    imageView = [[UIImageView alloc]init];
    
    // The imageView can be zoomed largest size
    imageView.frame = CGRectMake(0, 0, MRScreenWidth * 2.5, MRScreenHeight * 2.5);
    imageView.userInteractionEnabled = YES;
    [self addSubview:imageView];
    
    // Add gesture,double tap zoom imageView.
    UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                                action:@selector(handleDoubleTap:)];
    [doubleTapGesture setNumberOfTapsRequired:2];
    [imageView addGestureRecognizer:doubleTapGesture];
    
    float minimumScale = self.frame.size.width / imageView.frame.size.width;
    [self setMinimumZoomScale:minimumScale];
    [self setZoomScale:minimumScale];
}


#pragma mark - Zoom methods

- (void)handleDoubleTap:(UIGestureRecognizer *)gesture
{
    float newScale = self.zoomScale * 1.5;
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gesture locationInView:gesture.view]];
    [self zoomToRect:zoomRect animated:YES];
}

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center
{
    CGRect zoomRect;
    zoomRect.size.height = self.frame.size.height / scale;
    zoomRect.size.width  = self.frame.size.width  / scale;
    zoomRect.origin.x = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
    return zoomRect;
}


#pragma mark - UIScrollViewDelegate

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return imageView;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
    [scrollView setZoomScale:scale animated:NO];
}
@end

使用方法(需要SDWebImage加载网络图片):

 MRZoomScrollView *mrzoom = [[MRZoomScrollView alloc] init];
    mrzoom = [[MRZoomScrollView alloc]init];
    CGRect frame = self.view.frame;
    NSLog(@"%f",frame.size.width);
    mrzoom.frame = frame;
    [mrzoom.imageView setImageWithURL:[NSURL URLWithString:@"图片的url路径"]];
    [self.view addSubview:mrzoom];




相关文章推荐

Android之关于手势操作图片的缩放与移动

在Android中实现手势对于图片的操作,首先需要对MotionEvent以及Matrix两个类有所了解实现对手势的识别以及图片变动的操作。具体介绍可见在下其他两篇博文.. 在实现该功能时候需要在x...

android中手势操作图片的平移、缩放、旋转

转自:http://blog.csdn.net/happy_bug/article/details/7895244

android中手势操作图片的平移、缩放、旋转

在网上搜到很多都是一样的版本,只有平移和缩放的功能。我在搜到的源代码基础上添加了旋转和边界检查的功能。  代码主要分两部分,一个activity一个view,代码如下: package com.e...

Android开发:对图片的手势操作——旋转、缩放、移动

以下代码经过测试,如有问题,请留言! activity_main.xml文件:
  • emovie
  • emovie
  • 2013年05月16日 16:04
  • 1039

Android之关于手势操作图片的缩放与移动

  • redouba
  • redouba
  • 2014年03月25日 13:07
  • 1282

自定义Imageview控件实现多种手势操作 (拖动、水平缩放、竖直缩放、等比例缩放、双击、长按)

该自定义控件实现的主要功能是控件的拖动和缩放(注意:不是对控件中的图片进行操作,话说很多帖子都把这两个混了),其中缩放可以按照三个方向进行,就是水平、竖直和等比例。双击操作只做了一个提示,长按加上了一...

多手势操作实现ios图文混排

  • 2014年07月07日 22:19
  • 2.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[iOS]手势操作实现图片的缩放
举报原因:
原因补充:

(最多只允许输入30个字)