zoukankan      html  css  js  c++  java
  • 猫猫学IOS(九)UI之UIScrollView代理触摸实现_图片缩放

    猫猫分享,必须精品

    素材代码地址:http://blog.csdn.net/u013357243/article/details/44619193
    原文地址:http://blog.csdn.net/u013357243?viewmode=contents

    先看效果

    这里写图片描述
    这里写图片描述

    代码

    //
    //  NYViewController.m
    //  05-放大缩小图片UIScrollView
    //
    //  Created by apple on 15-3-25.
    //  Copyright (c) 2015年 znycat. All rights reserved.
    //
    
    #import "NYViewController.h"
    
    @interface NYViewController ()
    
    @property (nonatomic, strong) UIScrollView *scrollView;
    
    @property (nonatomic, strong) UIImageView *imageView;
    
    //假设图片是从网络上获取的
    @property (nonatomic, strong) UIImage *image;
    
    @end
    
    @implementation NYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        // 设置图像
        self.image = [UIImage imageNamed:@"minion"];
    
    
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
        btn.center = self.view.center;//将按钮放到view中间
        [self.view addSubview:btn];
    
        [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
    }
    
    /**
     放大缩小
    
     1> 设置代理
     2> 指定最大/最小的缩放比例
    
     */
    
    // 图像的setter
    - (void)setImage:(UIImage *)image
    {
        _image = image;
    
        // 设置图像视图的内容
        self.imageView.image = image;
        // 让图像视图根据图像自动调整大小
        [self.imageView sizeToFit];
    
        // 告诉scrollView内部内容的实际大小
        self.scrollView.contentSize = image.size;
    }
    
    /**
     在getter方法中
    
     * 如果是属性自身的,使用_成员变量
     * 如果是其他属性,使用self. getter方法,从而可以保证如果该对象没有被实例化,能够及时的被创建并加载
     */
    - (UIImageView *)imageView
    {
        if (_imageView == nil) {
            _imageView = [[UIImageView alloc] init];
    
            [self.scrollView addSubview:_imageView];
        }
        return _imageView;
    }
    
    - (UIScrollView *)scrollView
    {
        if (_scrollView == nil) {
            _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    
            // 设置属性
            // 设置边距
            _scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
    
            // 不显示水平滚动标示
            _scrollView.showsHorizontalScrollIndicator = NO;
            // 不显示垂直滚动标示
            _scrollView.showsVerticalScrollIndicator = NO;
    
            // *** 偏移位置
            _scrollView.contentOffset = CGPointMake(0, 0);
    
            // 取消弹簧效果,内容固定,不希望出现弹簧效果时
            // 不要跟bounds属性搞混了
            _scrollView.bounces = NO;
    
            // 设置代理
            _scrollView.delegate = self;
            // 设置最大/最小缩放比例
            _scrollView.maximumZoomScale = 2.0;
            _scrollView.minimumZoomScale = 0.2;
    
            [self.view addSubview:_scrollView];
        }
        return _scrollView;
    }
    
    
    
    //移动scrollView的位置
    - (void)click
    {
        // 移动大图的偏移位置
        CGPoint offset = self.scrollView.contentOffset;
        offset.x += 20;
        offset.y += 20;
    
        // 注意:设置contentOffset会忽略contentSize
        self.scrollView.contentOffset = offset;
    }
    
    #pragma mark - UIScrollView的代理方法
    /**
     1> 设置了代理
     2> 指定了最大、最小的缩放比例
    
     表示ScrollView是可以缩放的
    
     代理方法的"返回值"实际上就是控制器告诉滚动视图,要缩放的是UIImageView
     */
    // 告诉ScrollView要缩放的视图是谁,具体的缩放实现,是由ScrollView来完成的
    // 1> scrollView要知道缩放谁
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return self.imageView;
    }
    
    
    
    // 2> 滚动视图即将开始缩放,通常不需要写
    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
    {
        NSLog(@"%s", __func__);
    }
    // 3> 正在缩放,通常也不需要实现
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    {
        //    NSLog(@"%s", __func__);
        NSLog(@"%@", NSStringFromCGAffineTransform(self.imageView.transform));
    }
    // 4> 完成缩放,通常也不需要实现
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
    {
        NSLog(@"%s", __func__);
    }
    
    @end
    

    图片完成触摸缩放功能

    设置代理
    _scrollView.delegate = self;
    设置最大/最小缩放比例
    _scrollView.maximumZoomScale = 2.0;
    _scrollView.minimumZoomScale = 0.2;

    1> 设置了代理
    2> 指定了最大、最小的缩放比例表示ScrollView是可以缩放的
    代理方法的”返回值”实际上就是控制器告诉滚动视图,要缩放的是UIImageView
    告诉ScrollView要缩放的视图是谁,具体的缩放实现,是由ScrollView来完成的
    scrollView要知道缩放谁
    - (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView
    {
    return self.imageView;
    }

    好了 就着几行就是手指触摸缩放的实现代码了

    ps:新建iOS交流学习群:304570962
    ps:猫猫的文章竟然被好多地方转载了,受宠若惊啊,不过转的时候请转的全一点,别丢下素材什么的,不标注转载也没事,大家一起努力学习猫猫就很高兴了,如果需要学习资料视频素材等等的可以加猫猫QQ:1764541256 或则微信znycat
    让我们一起努力学习吧。
    目前将这个游戏的功能都实现了,虽然部分代码抽取的不是那么完美
    原文:http://blog.csdn.net/u013357243?viewmode=contents

  • 相关阅读:
    海龟交易
    暑假攻略:怎样让孩子过一个充实又省钱的假期
    值得追随
    在哪里能找的你想要的答案?
    顺势加仓策略
    交易中 你的加仓策略是怎样的?背后的逻辑是什么?
    驻守深寒:寻找那些有效地关键K线
    统计相关
    求助Ubuntu16.10如何设置默认启动为字符界面
    【Linux系列】Ubuntu ping通,xshell无法连接
  • 原文地址:https://www.cnblogs.com/znycat/p/4375202.html
Copyright © 2011-2022 走看看