zoukankan      html  css  js  c++  java
  • uiscrollview 图片放大缩小

    1、UIScrollView下图片的捏合放大和缩小,我们直接用scrollView自带的属性就可以了,这个没什么好说,我们直接贴代码:
    [plain] view plaincopy
    //控制器  
     theScroll=[[UIScrollView alloc] initWithFrame:frame];  
     theScroll.userInteractionEnabled=YES;  
     theScroll.maximumZoomScale=2.0;//最大倍率(默认倍率)  
     theScroll.minimumZoomScale=1.0;//最小倍率(默认倍率)  
     theScroll.decelerationRate=1.0;//减速倍率(默认倍率)  
     theScroll.delegate=self;  
     theScroll.autoresizingMask =UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight;  
     [self addSubview:theScroll];  
       
     //图片  
     UIImage *theImageName=[UIImage imageNamed:imageName];  
     theImage=[[UIImageView alloc] initWithImage:theImageName];  
     theImage.userInteractionEnabled=YES;  
     theImage.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight;  
     //图片默认作为2倍图处理  
     theImage.frame=CGRectMake(0, 0, theImageName.size.width/2, theImageName.size.height/2);  
     [theScroll addSubview:theImage];  
    另外,我们还要在scrollView的delegate里面设置一下:
    [plain] view plaincopy
    #pragma mark -UIScrollView delegate  
    -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView  
    {  
        return theImage;  
    }  
    2、scrollView对图片的双击放大和缩小
    这里我是通过对双击手势(UIGestureRecognizer)和scrollView的setZoomScale方法来实现放大和缩小。
    #创建双击手势
    [plain] view plaincopy
    //双击手势  
    UITapGestureRecognizer *doubelGesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleGesture:)];  
    doubelGesture.numberOfTapsRequired=2;  
    [theImage addGestureRecognizer:doubelGesture];  
    [doubelGesture release];  
    #另外,我们要记录当前的倍率,然后通过判断,是放大还是缩小。当然,还配合捏合的放大和缩小,所以,要在scrollView的delegate里面记录当前倍率,代码:
    [plain] view plaincopy
    -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale  
    {  
        currentScale=scale;  
    }  
    
    #双击手势的方法
    [plain] view plaincopy
    #pragma mark -DoubleGesture Action  
    -(void)doubleGesture:(UIGestureRecognizer *)sender  
    {  
          
        //当前倍数等于最大放大倍数  
        //双击默认为缩小到原图  
        if (currentScale==_maxScale) {  
            currentScale=minScale;  
            [theScroll setZoomScale:currentScale animated:YES];  
            return;  
        }  
        //当前等于最小放大倍数  
        //双击默认为放大到最大倍数  
        if (currentScale==minScale) {  
            currentScale=_maxScale;  
            [theScroll setZoomScale:currentScale animated:YES];  
            return;  
        }  
          
        CGFloat aveScale =minScale+(_maxScale-minScale)/2.0;//中间倍数  
          
        //当前倍数大于平均倍数  
        //双击默认为放大最大倍数  
        if (currentScale>=aveScale) {  
            currentScale=_maxScale;  
            [theScroll setZoomScale:currentScale animated:YES];  
            return;  
        }  
          
        //当前倍数小于平均倍数  
        //双击默认为放大到最小倍数  
        if (currentScale<aveScale) {  
            currentScale=minScale;  
            [theScroll setZoomScale:currentScale animated:YES];  
            return;  
        }  
    }  
  • 相关阅读:
    vue自定义指令使用注意事项
    es6新增方法---实用
    webpack和gulp的区别
    OSI 5层协议,socket,从协议角度看网络通信
    网络通信流程
    数据相关的模块
    一些模块
    面向对象
    ATM作业
    XML模块增删改查基本操作
  • 原文地址:https://www.cnblogs.com/zengyanzhi/p/3921888.html
Copyright © 2011-2022 走看看