结合UIImageView实现图片的移动和缩放

本文介绍如何在iPhone应用中使用UIImageView实现图片的移动和缩放功能。通过手势识别,实现了单点触摸的拖动和多点触摸的捏合缩放。详细介绍了相关代码实现过程,包括设置原图显示、识别手势以及处理移动和缩放的操作。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

因为种种原因,需要在iphone应用中实现图片查看功能,由于iphone屏幕支持多点触摸,于是是想到用“手势”来实现图片的实时缩放和移动。借鉴无所不在的internet网络资料之后,终于实现此一功能,过程如下。

为方便大家下载,示例代码已上传到资源:http://download.csdn.net/detail/kmyhy/4095890

一、 首先实现原图显示(不缩放)

新建MoveScaleImageView类,继承uiview。用于加载一个UIImage。它有两个主要的成员,一个UIImage对象用于指定一个内存图片,一个UIImageView控件用于显示图片。

@interface MoveScaleImageView :UIView {

UIImage* originImage;

UIImageView* imageView;

}

-(void)setImage:(UIImage*)_image;

@end

@implementation MoveScaleImageView

 

-(id)initWithFrame:(CGRect)frame{

if (self=[super initWithFrame:frame]) {

imageView=[[UIImageView alloc]init];

[self addSubview:imageView];

// 使图片视图支持交互和多点触摸

[imageView setUserInteractionEnabled:YES];

[imageView setMultipleTouchEnabled:YES];

 

}

return self;

}

-(void)dealloc{

originImage=nil;

imageView=nil;

[super dealloc];

}

-(void)setImage:(UIImage *)_image{

originImage=[[UIImage alloc]initWithCGImage:_image.CGImage];

[imageView setImage:originImage];

[imageView setFrame:CGRectMake(0, 0, _image.size.width, _image.size.height)];

// [imageView setNeedsLayout];

}

@end

最主要的就是setImage方法。

MoveScaleImageView的使用很简单。在ViewController中构造一个MoveScaleImageView,然后用一个加载了图片文件的UIImage对象设置其image成员:

UIImage* image=[UIImage imageNamed:@"df.jpg"];

MoveScaleImageView* [[MoveScaleImageView alloc]initWithFrame:

 CGRectMake(0, 44, 320, 436)];

[fileContent setImage:image];

 

 

由于在这里我们没有对图片进行任何的缩放处理,对于小图片会位于屏幕的左上角,并在其他地方留下空白;对于尺寸大于屏幕的图片,则图片不能完全显示:

一、 识别手势(单点触摸与多点触摸)

要想识别手势(gesture),必须响应4个手势的通知方法(参考“iphone3开发基础教程”第13章的内容):

touchesBegan,touchesMoved,touchesEnded和touchesCancelled。

首先,我们先来考虑单点触摸情况,这比较简单一些。在单点触摸情况下,移动手指,imageView中的图片可以被拖动,这样,对于比较大的图片,我们可以通过拖动来浏览图片的各个部分,当然,对于能一次显示下全部的图片就不需要拖动了。

修改类MoveScaleImageView,在.h中增加一些声明:

@interface MoveScaleImageView :UIView {

UIImage* originImage;

UIImageView* imageView;

CGPoint gestureStartPoint;//手势开始时起点

CGFloat offsetX,offsetY;//移动时x,y方向上的偏移量

CGFloat curr_X,curr_Y;//现在截取的图片内容的原点坐标

}

-(void)setImage:(UIImage*)_image;

-(void)moveToX:(CGFloat)x ToY:(CGFloat)y;

@end

然后实现touchesBegan和touchesMoved方法。

touchesBegan方法比较简单,记录下手指第一次触摸的位置。因为任何一个拖动都必然有一个起点和终点。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch *touch=[touches anyObject];

gestureStartPoint=[touch locationInView:self];

// NSLog(@"touch:%f,%f",gestureStartPoint.x,gestureStartPoint.y);

}

然后是手指移动后回调的touchesMoved方法:

 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch* touch=[touches anyObject];

CGPoint curr_point=[touch locationInView:self

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值