博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用UIScrollView做一个支持两点触控缩放图片
阅读量:4497 次
发布时间:2019-06-08

本文共 3423 字,大约阅读时间需要 11 分钟。

ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIGestureRecognizerDelegate> {
    float distStart,distEnd,scale;
    UIScrollView *scrollView;
    UIImage *image;
    UIImageView *imageView;
}
@end

 

ViewController.m:

- (void)viewDidLoad

{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //
    scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake((self.view.bounds.origin.x), self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height)];
   
    [self.view addSubview:scrollView];
    image = [UIImage imageNamed:@"img.jpg"];
    imageView = [[UIImageView alloc]initWithImage:image];
    scrollView.contentSize = imageView.bounds.size;
    [scrollView addSubview:imageView];
    [scrollView setBackgroundColor:[UIColor blueColor]];
   
    UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc]
                                                
                                                 initWithTarget:self action:@selector(scale:)];
    [pinchRecognizer setDelegate:self];
    [self.view addGestureRecognizer:pinchRecognizer];
    [pinchRecognizer release];
}
-(void)scale:(id)sender {
    UIPinchGestureRecognizer* ges = (UIPinchGestureRecognizer*)sender;
    int touchCount = ges.numberOfTouches;
    if (touchCount == 2) {
        if ([ges state] == UIGestureRecognizerStateBegan) {
            CGPoint p1 = [ges locationOfTouch:0 inView:self.view];
            CGPoint p2 = [ges locationOfTouch:1 inView:self.view];
            distStart = [self distanceFromPointX:p1 distanceToPointY:p2];
        } else if ([ges state] == UIGestureRecognizerStateEnded) {
            CGPoint p1 = [ges locationOfTouch:0 inView:self.view];
            CGPoint p2 = [ges locationOfTouch:1 inView:self.view];
            distEnd = [self distanceFromPointX:p1 distanceToPointY:p2];
           
            scale = distEnd / distStart;
            float newWidth = imageView.bounds.size.width * scale;           
            float newHeight = imageView.bounds.size.height * scale;
            if (newWidth < self.view.bounds.size.width) {
                newWidth = self.view.bounds.size.width;
                newHeight = imageView.bounds.size.height/imageView.bounds.size.width * newWidth;
            }
           
            if (newHeight < self.view.bounds.size.height) {
                newHeight = self.view.bounds.size.height;
                newWidth = imageView.bounds.size.width/imageView.bounds.size.height * newHeight;
            }
            [imageView setFrame:CGRectMake(0, 0, newWidth, newHeight)];
            scrollView.contentSize = imageView.bounds.size;
            [scrollView setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
        }       
    }
}
-(float)distanceFromPointX:(CGPoint)start distanceToPointY:(CGPoint)end{   
    float distance;   
    CGFloat xDist = (end.x - start.x);   
    CGFloat yDist = (end.y - start.y);   
    distance = sqrt((xDist * xDist) + (yDist * yDist));   
    return distance;   
}

还有一种实现方式,代码如下:

-(void)scale:(id)sender {

    UIPinchGestureRecognizer* gues = (UIPinchGestureRecognizer*)sender;
    [self.view bringSubviewToFront:[gues view]];
   
    //当手指离开屏幕时,将lastscale设置为1.0
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
        lastScale = 1.0;
        return;
    }
   
    CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
   
   
    [[gues view] setTransform:newTransform]; 
   
   
    lastScale = [(UIPinchGestureRecognizer*)sender scale];   
    CGRect bnds = CGRectApplyAffineTransform(gues.view.bounds, newTransform);
    [sv setContentSize:bnds.size];
    [iv setFrame:bnds];   
}

转载于:https://www.cnblogs.com/yuanxiaoping_21cn_com/archive/2012/09/16/2687556.html

你可能感兴趣的文章
Python学习-5.Python的变量与数据类型及字符串的分割与连接
查看>>
98%的人没解出的德国面试逻辑题
查看>>
mysql 复制表结构 / 从结果中导入数据到新表
查看>>
fiddler---使用方法2--抓取其他电脑数据包
查看>>
python基础教程——切片
查看>>
android 获取坐标【转】
查看>>
Windows Text Copyer 1.1绿色版
查看>>
内存重叠strcpy\memcpy
查看>>
球的移动(move)
查看>>
页面禁止双击选中
查看>>
打印流
查看>>
TCP/IP模型的一个简单解释
查看>>
解开最后期限的镣铐(转载)
查看>>
Kth Smallest Element in a BST
查看>>
ubuntu14.04利用aliyun安装docker
查看>>
iphone-命令行编译之--xcodebuild
查看>>
shell笔记
查看>>
python的循环,质数和因子的定义
查看>>
Plan : 破晓
查看>>
JSON【介绍、语法、解析JSON】
查看>>