当我们放大并缩小ios中的图像时,如何获取原始图像

时间:2015-08-21 11:29:29

标签: ios swift

您好我是ios的初学者,在我的项目中,我在UIScrollview上添加UIImage,我在UIImage上添加了点击手势

当我们双击UIImage时,图像应该在视图控制器上缩放全屏大小

在全屏尺寸图像之后我们可以像我们想要的任何方式一样缩放(我的意思是使用像捏缩放效果)这里我的要求是当我们双击图像然后图像需要设置它的原始位置我已经尝试了我的水平最好,但我没有得到结果请帮助我

我的代码如下:

#import "ViewController2.h"

@interface ViewController2 ()
{
    UIScrollView * myScroll;
    UITapGestureRecognizer *tap;
    BOOL isFullScreen;
    CGRect prevFrame;
    UIImageView * _imageView;
}

@end

@implementation ViewController2

- (void)viewDidLoad
{
    [super viewDidLoad];

    isFullScreen = FALSE;
    myScroll = [[UIScrollView alloc] init];
    myScroll.frame = self.view.bounds;
    myScroll.contentSize = CGSizeMake(_imageView.frame.size.width, _imageView.frame.size.height);
    myScroll.maximumZoomScale = 4.0;
    myScroll.minimumZoomScale = 1.0;
    myScroll.clipsToBounds = YES;
    myScroll.delegate = self;
    myScroll.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:myScroll];

    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 300, 200)];
    _imageView.contentMode = UIViewContentModeScaleAspectFill;
    [_imageView setClipsToBounds:YES];
    _imageView.userInteractionEnabled = YES;
    _imageView.image = [UIImage imageNamed:@"ram.jpeg"];

    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen:)];
    tapper.numberOfTapsRequired = 1;
    [_imageView addGestureRecognizer:tapper];
    [myScroll addSubview:_imageView];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

    return _imageView;
}

-(void)imgToFullScreen:(UITapGestureRecognizer*)sender {

    if (!isFullScreen) {

        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{

            prevFrame = _imageView.frame;
            [_imageView setFrame:[[UIScreen mainScreen] bounds]];
        }completion:^(BOOL finished){
            isFullScreen = TRUE;
        }];
        return;
    }
    else{
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            [_imageView setFrame:prevFrame];
        }completion:^(BOOL finished){
            isFullScreen = FALSE;
        }];
        return;
    }
}

@end

1 个答案:

答案 0 :(得分:0)

我在你的代码中做了一些修改,如下所示尝试。检查它是否给你想要的输出。

@interface   ScrollViewController ()<UIScrollViewDelegate>{
        UIScrollView * myScroll;
        UITapGestureRecognizer *tap;
        BOOL isFullScreen;
        CGRect prevFrame;
        UIImageView * _imageView;
        CGAffineTransform trans;
    }



    @end

    @implementation ScrollViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.

        isFullScreen = FALSE;
        myScroll = [[UIScrollView alloc] init];
        myScroll.frame = [UIScreen mainScreen].bounds;
        myScroll.contentSize = CGSizeMake(prevFrame.size.width, prevFrame.size.height);
        myScroll.maximumZoomScale = 4.0;
        myScroll.minimumZoomScale = 1.0;
        myScroll.clipsToBounds = YES;
        myScroll.delegate = self;
        myScroll.backgroundColor = [UIColor lightGrayColor];
        [self.view addSubview:myScroll];

        _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 300, 200)];
        _imageView.contentMode = UIViewContentModeScaleAspectFill;
        [_imageView setClipsToBounds:YES];
        _imageView.userInteractionEnabled = YES;
        _imageView.image = [UIImage imageNamed:@"img.png"];

        UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen:)];
        tapper.numberOfTapsRequired = 2;
        [_imageView addGestureRecognizer:tapper];
        [myScroll addSubview:_imageView];

        prevFrame = _imageView.frame;
        trans = _imageView.transform;
    }

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

        return _imageView;
    }

    -(void)imgToFullScreen:(UITapGestureRecognizer*)sender {


        if (!isFullScreen) {
             myScroll.contentSize = prevFrame.size;
            [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
                _imageView.frame = [UIScreen mainScreen].bounds;

            }completion:^(BOOL finished){
                isFullScreen = TRUE;

            }];
            return;
        }
        else{
            [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{

                myScroll.contentSize = CGSizeMake(prevFrame.size.width, prevFrame.size.height);
                _imageView.transform = trans;
                _imageView.frame = prevFrame;


                NSLog(@"%@ %@",NSStringFromCGSize(myScroll.contentSize),NSStringFromCGRect(prevFrame));
            }completion:^(BOOL finished){
                isFullScreen = FALSE;

            }];
            return;
        }
    }