NT_iOS笔记—iOS图片显示1_图片放大缩小

本文介绍了一种使用 UIImageView 和 UIScrollView 实现图片放大缩小及触摸控制的方法。通过自定义 NTImageView 类,实现了图片的放大缩小、单击关闭图片、双击放大图片等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-size:18px;">
</span>

文章内图片点击后需要单独显示有木有、需要支持放大缩小有木有、需要支持横屏显示有木有....

图片放大缩小结合UIImageViewUIScrollVIew实现。

通过UIScrollView的方法

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale;

来获取放大缩小比例然后改变UIScrollView的zoomScale值来实现。

<span style="font-size:18px;">//
//  NTImageView.h
//  NTCoreTextReader
//
//  Created by liying on 14-7-3.
//  Copyright (c) 2014年 liying. All rights reserved.
//

#import <UIKit/UIKit.h>
@class NTImageView;

@protocol NTImageViewDelegate <NSObject>

@required

-(void)closeTheImageView;

@end

@interface NTImageView : UIScrollView<UIScrollViewDelegate>
{
    CGFloat imageValue;
}
@property (nonatomic, strong)NSString *imagePath;

@property (nonatomic, strong)UIImageView *imageView;

@property (nonatomic, assign)id idelegate;

@property (nonatomic, strong)UIImage *image;

@property (nonatomic, assign)CGRect imageRect;

-(void)ResetView;

-(void)changeImageView:(UIImageView *)imageview;

@end
</span></span>

<span style="font-size:18px;">//
//  NTImageView.m
//  NTCoreTextReader
//
//  Created by liying on 14-7-3.
//  Copyright (c) 2014年 liying. All rights reserved.
//

#import "NTImageView.h"

@implementation NTImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.delegate = self;
        self.zoomScale=1;
		self.minimumZoomScale = 1;
		self.maximumZoomScale = 3.0;
		self.showsVerticalScrollIndicator = NO;
		self.showsHorizontalScrollIndicator = NO;
        self.backgroundColor=[UIColor clearColor];
    }
    return self;
}

-(void)ResetView
{
    _imageView=[[UIImageView alloc] initWithFrame:self.frame];
    if (_image) {
        _imageView.image=_image;
    }
    else
        _imageView.image=[UIImage imageWithContentsOfFile:_imagePath];
    _imageView.backgroundColor=[UIColor clearColor];
    [self addSubview:_imageView];
    [self changeImageView:_imageView];
}


-(void)changeImageView:(UIImageView *)imageview
{
    self.zoomScale=1;
    
    if (self.frame.size.width<self.frame.size.height)
    {
        if (imageview.image.size.width>imageview.image.size.height)
        {
            if (imageview.image.size.width<self.frame.size.width)
            {
                imageview.frame = CGRectMake((self.frame.size.width-imageview.image.size.width)/2, (self.frame.size.height-imageview.image.size.height)/2, imageview.image.size.width, imageview.image.size.height);
            }
            else
            {
                imageview.frame = CGRectMake(0, (self.frame.size.height-imageview.image.size.height*self.frame.size.width/imageview.image.size.width)/2, self.frame.size.width, imageview.image.size.height*self.frame.size.width/imageview.image.size.width);
            }
        }
        else
        {
            if (imageview.image.size.height<self.frame.size.height)
            {
                if (imageview.image.size.width<self.frame.size.width)
                {
                    imageview.frame = CGRectMake((self.frame.size.width-imageview.image.size.width)/2, (self.frame.size.height-imageview.image.size.height)/2, imageview.image.size.width, imageview.image.size.height);
                }
                else
                {
                    imageview.frame = CGRectMake(0, (self.frame.size.height-imageview.image.size.height*self.frame.size.width/imageview.image.size.width)/2, self.frame.size.width, imageview.image.size.height*self.frame.size.width/imageview.image.size.width);
                }
            }
            else
            {
                float wid= imageview.image.size.width*self.frame.size.height/imageview.image.size.height;
                if (wid>self.frame.size.width)
                {
                    imageview.frame = CGRectMake(0, (self.frame.size.height-imageview.image.size.height*self.frame.size.width/imageview.image.size.width)/2, self.frame.size.width, imageview.image.size.height*self.frame.size.width/imageview.image.size.width);
                }
                else
                {
                    imageview.frame = CGRectMake((self.frame.size.width-wid)/2, 0, wid, self.frame.size.height);
                }
            }
        }
    }
    else
    {
        if (imageview.image.size.width<imageview.image.size.height)
        {
            if (imageview.image.size.height<self.frame.size.height)
            {
                imageview.frame = CGRectMake((self.frame.size.width-imageview.image.size.width)/2, (self.frame.size.height-imageview.image.size.height)/2, imageview.image.size.width, imageview.image.size.height);
            }
            else
            {
                imageview.frame = CGRectMake((self.frame.size.width-imageview.image.size.width*self.frame.size.height/imageview.image.size.height)/2, 0, imageview.image.size.width*self.frame.size.height/imageview.image.size.height, self.frame.size.height);
            }
        }
        else
        {
            if (imageview.image.size.height<self.frame.size.height)
            {
                if (imageview.image.size.width<self.frame.size.width)
                {
                    imageview.frame = CGRectMake((self.frame.size.width-imageview.image.size.width)/2, (self.frame.size.height-imageview.image.size.height)/2, imageview.image.size.width, imageview.image.size.height);
                }
                else
                {
                    imageview.frame = CGRectMake(0, (self.frame.size.height-imageview.image.size.height*self.frame.size.width/imageview.image.size.width)/2, self.frame.size.width, imageview.image.size.height*self.frame.size.width/imageview.image.size.width);
                }
            }
            else
            {
                float wid= imageview.image.size.width*self.frame.size.height/imageview.image.size.height;
                if (wid>self.frame.size.width)
                {
                    imageview.frame = CGRectMake(0, (self.frame.size.height-imageview.image.size.height*self.frame.size.width/imageview.image.size.width)/2, self.frame.size.width, imageview.image.size.height*self.frame.size.width/imageview.image.size.width);
                }
                else
                {
                    imageview.frame = CGRectMake((self.frame.size.width-wid)/2, 0, wid, self.frame.size.height);
                }
            }
        }
    }
    _imageRect=imageview.frame;
}

#pragma mark - UIScrollView Delegate -
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return _imageView;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIImageView *)view atScale:(float)scale
{
	CGFloat zs = scrollView.zoomScale;
	zs = MAX(zs, 1);
	zs = MIN(zs, 3.0);
	
	[UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.3];
	scrollView.zoomScale = zs;
    imageValue=zs;
	[UIView commitAnimations];
    
    if (self.contentSize.width>=self.frame.size.width&&self.contentSize.height>=self.frame.size.height)
    {
        view.center=CGPointMake(self.contentSize.width/2, self.contentSize.height/2);
    }
    else if (self.contentSize.width>=self.frame.size.width&&self.contentSize.height<=self.frame.size.height)
    {
        view.center=CGPointMake(self.contentSize.width/2, self.frame.size.height/2);
    }
    else if (self.contentSize.width<=self.frame.size.width&&self.contentSize.height>=self.frame.size.height)
    {
        view.center=CGPointMake(self.frame.size.width/2, self.contentSize.height/2);
    }
    else if (self.contentSize.width<=self.frame.size.width&&self.contentSize.height<=self.frame.size.height)
    {
        view.center=CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    }
}

#pragma mark - UITouch Delegate -

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    switch (touch.tapCount) {
        case 1:
            [self performSelector:@selector(singleTap) withObject:nil afterDelay:0.3];
            break;
        case 2:{
            [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];
            [self performSelector:@selector(doubleTap) withObject:nil afterDelay:0];
        }
            break;
        default:
            break;
    }
}

-(void)singleTap
{
    self.zoomScale=1;
    _imageView.frame=_imageRect;
    [_idelegate closeTheImageView];
}

-(void)doubleTap
{
    imageValue=self.zoomScale;
    if (imageValue>=3.0)
    {
        imageValue=1;
    }
    else
    {
        imageValue+=0.5;
    }
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    self.zoomScale = imageValue;
    [UIView commitAnimations];
    
    if (self.contentSize.width>=self.frame.size.width&&self.contentSize.height>=self.frame.size.height)
    {
        _imageView.center=CGPointMake(self.contentSize.width/2, self.contentSize.height/2);
    }
    else if (self.contentSize.width>=self.frame.size.width&&self.contentSize.height<=self.frame.size.height)
    {
        _imageView.center=CGPointMake(self.contentSize.width/2, self.frame.size.height/2);
    }
    else if (self.contentSize.width<=self.frame.size.width&&self.contentSize.height>=self.frame.size.height)
    {
        _imageView.center=CGPointMake(self.frame.size.width/2, self.contentSize.height/2);
    }
    else if (self.contentSize.width<=self.frame.size.width&&self.contentSize.height<=self.frame.size.height)
    {
        _imageView.center=CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    }
}

-(void)dealloc
{
    _imageView.image=nil;
    _imageView=nil;
}

@end
</span></span>

上面的方法中加入了单击关掉图片,双击放大图片的方法。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值