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


    系统的 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
  • 相关阅读:
    分布式系统笔记
    Paxos算法细节详解(一)
    Java G1学习笔记
    Spring Boot 的 10 个核心模块
    k8s 重点
    毕玄:阿里十年,从分布式到云时代的架构演进之路
    netty原理解析
    JVM调优总结(一):基本概念
    《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor
    Oracle 检查表空间使用情况
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4257408.html
Copyright © 2020-2023  润新知