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

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
时间: 2024-10-06 20:00:37

简易图片浏览器【可缩放图片,滑动后恢复正常】的相关文章

在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

我们就把这个问题叫做图片查看器吧,它的主要功能有: 1.双击缩放图片. 2. 双指缩放图片. 3.单指拖拽图片. 为此这个图片查看器需要考虑以下的技术点: 一.双击缩放图片: 1.如果图片高度比屏幕的高度小得多,那么就将图片放大到高度与屏幕高度相等,否则就放大一个特定的倍数. 2.如何判断是否到达这个倍数来停止缩放. 3.判断完且停止放大后,图片可能已经超出了这个倍数需要的大小,如何回归到我们的目标大小. 4.判断完且停止缩小后,图片宽度可能已经小于屏幕宽度,在两边留下了空白,如何重置为原来的大

快速集成图片浏览器快速集成图片浏览器-&gt;MJPhotoBrowser的使用

介绍: 一个比较完整的图片浏览器,高仿了新浪微博的图片浏览效果,功能包括:下载浏览互联网图片,点击缩略图全屏显示图片.当加载较大图片时会出现圆形进度条,滑动浏览所有图片.保存图片到本地相册.GIF图片播放等.而且仅需几行代码就能添加图片浏览器功能. 项目地址:http://code4app.com/ios/快速集成图片浏览器/525e06116803fa7b0a000001 使用: for (int i = 0; i<3; i++) { UIImageView *img = [[UIImageV

改造discuz点击图片,滚轮缩放图片(可任意拖移)插件

今天给大家带来一款图片的缩放插件.该插件适用浏览器:IE9及IE9 +.360.Chrome.Firefox.Safari.Opera. 首先展示discuz论坛图片的插件,它具有在新窗口打开.显示实际大小以及关闭三个功能,效果图如下: 其实现代码为: [html] <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; cha

Css Sprite 图片等比缩放图片大小

图片大小80*40,即每张图片大小40*40,如何以20*20显示图片?1. 首先看下如何以40*40显示第二张图片: 正常显示css代码 .sprite { background-image: url(spritesheet.png); background-repeat: no-repeat; display: block; } .sprite-circle { width: 40px; height: 40px; background-position: -40px 0; } 正常显示ht

Android 简单图片浏览器 读取sdcard图片+形成缩略图+Gallery

1.读取SD卡上面的图片信息 //想要的返回值所在的列 String[] projection = { MediaStore.Images.Thumbnails._ID}; //图片信息存储在 android.provider.MediaStore.Images.Thumbnails数据库 //快速查询数据库中的图片对应存放路劲 Cursor cursor = managedQuery( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, pro

C#调用电脑的默认图片浏览器软件打开图片

private void 调用Window显示ToolStripMenuItem_Click(object sender, EventArgs e) { string filePathName = "";//定义图像文件的位置(包括路径及文件名) OpenFileDialog ofd = new OpenFileDialog(); //添加打开对话框 ofd.Filter = "图像文件|*jpg;*.bmp;*.png,*.tif|所有文件|*.*"; //设置过

android:使用gallery和imageSwitch制作可左右循环滑动的图片浏览器

为了使图片浏览器左右无限循环滑动 我们要自定义gallery的adapter 如果要想自定义adapter首先要了解这几个方法 @Override public int getCount() { // TODO Auto-generated method stub return 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Overri

ViewPager做图片浏览器,加载大量图片OOM的问题修正

1 /** 2 * @author CHQ 3 * @version 1.0 4 * @date 创建时间: 2016/7/26 17:18 5 * @parameter 6 * @return 7 * 图片查看器 8 * //可以查看网络图片 9 * //可以查看本地图片 10 */ 11 public class PhotoScan extends Activity { 12 private PhotoViewPager mViewPager; 13 private List<View>

swift项目初体验--教你打造一款个性化图片浏览器(篇幅过大,慎入)

项目需求:做一个图片浏览器,点击图片查看大图,大图模式下,左右滚动能查看不同的图片. 项目的主要核心技术:图片的弹出和消失动画 一.对代码进行重构 1.对代码进行抽取划分 1.1 为什么要对代码进行抽取? swift中,代码全部写在一起,阅读性极差 2.如何对代码进行抽取? 2.1在oc中,可以把功能模块抽取一个个方法 2.2swift中,专门提供 extension ,可以对原有的类进行扩展 3.怎么使用extension 抽取代码? 3.1 把一些方法写在extension(扩展)里面,这样