简易图片浏览器可缩放图片,滑动后恢复正常

Posted pengyuan_D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简易图片浏览器可缩放图片,滑动后恢复正常相关的知识,希望对你有一定的参考价值。

AppDelegate.h

#import "AppDelegate.h"
#import "RootViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    RootViewController *rootCtrl = [[RootViewController alloc] init];
    
    UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController:rootCtrl];
    
    NSMutableArray *mutArrary = [[NSMutableArray alloc] init];
    
    for (int i=0; i<5; i++)
    
        NSString *imgName = [NSString stringWithFormat:@"%d.JPG",i];
        UIImage *image = [UIImage imageNamed:imgName];
        [mutArrary addObject:image];
    
    
    rootCtrl.images = mutArrary;
    
    self.window.rootViewController = navCtrl;
    
    return YES;



@end
RootViewController.h

@interface RootViewController : UIViewController<UIScrollViewDelegate>

    NSInteger _index;


@property(nonatomic, retain)NSArray *images;    //存放显示的图片

RootViewController.m

#import "RootViewController.h"
#import "PhotoScrollView.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];

    //创建滚动视图
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 340, 480)];
    //隐藏水平滚动条
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.backgroundColor = [UIColor blackColor];
    scrollView.delegate = self;
    //设置分页效果
    scrollView.pagingEnabled = YES;
    
    //设置内容尺寸
    scrollView.contentSize = CGSizeMake(340*_images.count, 480);
    [self.view addSubview:scrollView];
    
    for (int i=0; i<self.images.count; i++) 
        PhotoScrollView *photoView = [[PhotoScrollView alloc] initWithFrame:CGRectMake(340*i, 0, 320, 480)];
        photoView.tag = i + 100;
        //传值
        photoView.image =_images[i];
        [scrollView addSubview:photoView];
    
    


#pragma mark - UIScrollView delegate

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 


    //1.获取当前的页数
    int currentPage = scrollView.contentOffset.x/340;
    
    //2.还原以前的缩放试图
    if (currentPage != _index) 
        //取得视图
        int tag = _index + 100;
        PhotoScrollView *view = (PhotoScrollView *)[scrollView viewWithTag:tag];
        
        //还原
        [view setZoomScale:1];
    
    
    
    //3.记录当前的页数
    _index = currentPage;


/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

*/

@end

PhotoScrollView.h

@interface PhotoScrollView : UIScrollView<UIScrollViewDelegate>

    UIImageView *_imageView;


@property(nonatomic, retain)UIImage *image;

PhotoScrollView.m

#import "PhotoScrollView.h"

@implementation PhotoScrollView

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 

        _imageView = [[UIImageView alloc] initWithFrame:self.bounds];
        
        //数据不能在这里设置
//        _imageView.image = _image;
        
        [self addSubview:_imageView];
        
        //设置最大放大倍数
        self.maximumZoomScale = 2.0;
        //设置最小缩小倍数
        self.minimumZoomScale = .5;
        
        //隐藏滚动条
        self.showsHorizontalScrollIndicator = NO;
        self.showsVerticalScrollIndicator = NO;
        
        //设置代理
        self.delegate = self;
        
        //添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapActoin:)];
        tap.numberOfTapsRequired = 2;
        [self addGestureRecognizer:tap];
        
    
    return self;


//手势响应事件
- (void)tapActoin:(UITapGestureRecognizer *)tap 

    if (self.zoomScale > 1) 
        //缩小
        [self setZoomScale:1 animated:YES];
    else 
        //放大
        [self setZoomScale:2 animated:YES];
    
    


- (void)setImage:(UIImage *)image 

    _image = image;
    
    _imageView.image = _image;


#pragma mark - UIScrollView delegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

    return _imageView;




@end



以上是关于简易图片浏览器可缩放图片,滑动后恢复正常的主要内容,如果未能解决你的问题,请参考以下文章

应使用哪些滚动视图和图像视图设置在 iOS 中显示可缩放图片?

QT中给各控件增加背景图片(可缩放可旋转)的几种方法

QT中给各控件增加背景图片(可缩放可旋转)的几种方法

关于移动端图片浏览,previewimage的使用

nodeJS实现简易爬虫

word文档怎么重新编辑页码