双击改变图片大小和多点触摸改变图片大小

系统的 UIScrollView 就有多点触摸改变图片的大小的功能,如果在向添加别的触摸事件,如这次讲到的双击图片大小就可以自定义一个 scrollView,当然,这个 scrollView 是继承自系统的 UIScrollView  的,这样,它仍然具有系统 scrollView 的特性,另外,可以添加自己想要的特性。

新的 scrollView 只需要添加一个方法,就可以实现双击图片变大的功能

#import "ZYScrollView.h"

@implementation ZYScrollView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
               
    }
    return self;
}

//触摸开始
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if (touch.tapCount == 2)
    {
        CGFloat zoomScale = self.zoomScale;
        //若 scrollView  的缩放比例是 1.0 (图片是原来的大小,没有经过放大 )就放大图片,若图片已经处在放大的状态,就将图片的大小缩小到原来的大小
        zoomScale = zoomScale == 1.0 ? 2.0 : 1.0;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        //改变缩放比例
        self.zoomScale = zoomScale;  // 通过改变缩放比例来改变图片的大小时,图片的起始坐标不会改变
        [UIView commitAnimations];
    }
}

在 视图控制器类中

@implementation ZYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor blackColor];
    
    //自定义类 双击可放大的scrollView
    ZYScrollView *scrollView = [[ZYScrollView alloc] initWithFrame:self.view.bounds];
    
    //多点触控缩放
//    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    
    //添加内容
    _imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    _imageView.image = [UIImage imageNamed:@"0.jpg"];
    //一个标记用来决定一个视图在它自身边界改变时怎样布局它的内容
    _imageView.contentMode = UIViewContentModeScaleAspectFit;
    [scrollView addSubview:_imageView];
    
    //设置代理
    scrollView.delegate = self;
    //设置内容视图的大小
    scrollView.contentSize = CGSizeMake(320, 1000);
    //设置缩放最小比例 CGFloat类型 默认为1.0
    scrollView.minimumZoomScale = 0.2;
    //设置缩放最大比例 CGFloat类型 默认为1.0
    scrollView.maximumZoomScale = 2.0;
    
    //点击状态栏时scrollView是否滚动到顶部 默认为YES
    scrollView.scrollsToTop = YES;
    
    scrollView.bounces = NO;  // 是否有弹射效果
    
    [self.view addSubview:scrollView];
    
    //设置 scrollView 当前的缩放比例
    scrollView.zoomScale = 1.0;
}

#pragma mark - UIScrollViewDelegate 缩放常用四方法
//缩放过程中会一直调用 即只要 zoomScale 值改变就调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    CGFloat scale = scrollView.zoomScale;
    CGRect zoomRect = CGRectZero;
    //获取内容视图缩放后的宽和高
    zoomRect.size.width = scrollView.frame.size.width*scale;
    zoomRect.size.height = scrollView.frame.size.height*scale;
  
    //如果缩放比例小于1.0 即缩小
    if (scale <= 1.0)
    {
        //让内容视图处在屏幕的中央
        zoomRect.origin.x = scrollView.center.x - (zoomRect.size.width  / 2.0);
        zoomRect.origin.y = scrollView.center.y - (zoomRect.size.height / 2.0);
    }

_imageView.frame = zoomRect; } //返回要缩放的UIView对象 如果return nil 什么都不发生 要执行多次 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return _imageView; } //在滚动视图开始缩放内容前调用 一次有效缩放 只执行一次 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { NSLog(@"scrollViewWillBeginZooming---%@", view); } //当缩放结束后,并且在缩放大小回到min和max之间的弹射动画完成后 调用该方法 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { } @end

 

posted @ 2015-01-28 23:14  红红de  阅读(435)  评论(1编辑  收藏  举报