今天这更有点迟了,让大家久等了。哈哈,今天好玩的又来了,我们来玩一玩,怎么把一张照片,旋转放大加移动。很期待吧,那么事不宜迟我们来实现它们。
说到这些功能,在ios中实现无非就是手势触摸功能,加上计算偏移,算出坐标。就ok了。非常的简单。
我们新建一个工程
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
{
UIImageView *_imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
[self
createImageView];
[self
createPinchGesture];
[self
createRotataeGesture];
// [self createPanGesture];
}
//创建缩放手势
-(void)createPinchGesture
{
UIPinchGestureRecognizer *pinchGes =[[UIPinchGestureRecognizer
alloc]init];
pinchGes .delegate =
self;
[pinchGes addTarget:self
action:@selector(pinchGes:)];
[_imageView
addGestureRecognizer:pinchGes];
}
-(void)pinchGes:(UIPinchGestureRecognizer *)ges
{
//比列
CGFloat scale = ges.scale;
//改变视图比列
ges.view.transform =
CGAffineTransformScale(ges.view.transform, scale, scale);
//比列为1
ges.scale =
1;
}
//创建旋转手势
-(void)createRotataeGesture
{
UIRotationGestureRecognizer *rotationGes = [[UIRotationGestureRecognizer
alloc]init];
rotationGes.delegate =
self;
[rotationGes addTarget:self
action:@selector(rotGes:)];
[_imageView
addGestureRecognizer:rotationGes];
}
-(void)rotGes:(UIRotationGestureRecognizer *)ges
{
ges.view.transform =
CGAffineTransformRotate(ges.view.transform, ges.rotation);
ges.rotation =
0;
}
-(void)createImageView
{
UIImageView *imageView = [[UIImageView
alloc]init];
imageView.frame =
CGRectMake(30,
60, 330,
500);
imageView.image = [UIImage
imageNamed:@"webwxgetmsgimg.jpg"];
imageView.userInteractionEnabled =
YES;
[self.view
addSubview:imageView];
_imageView = imageView;
}
//计算偏移量移动图片
//第一种计算方式
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[[self
class] cancelPreviousPerformRequestsWithTarget:self];
//取到当前触摸对象
UITouch *touch = [touches
anyObject];
//当前位置
CGPoint point = [touch
locationInView:self.view];
//之前的位置
CGPoint prePoint = [touch
previousLocationInView:self.view];
//计算两次点击的偏移量
CGPoint trans =
CGPointMake(point.x - prePoint.x, point.y - prePoint.y);
//修改imageview的结构(imageview的中心点
赋给center ,就是坐标的变化)
CGPoint center =
_imageView.center;
//把计算出来的偏移量,就是imagview的x轴加上算出来的偏移量,如是y轴不变,那就是0,不用加
_imageView.center =
CGPointMake(center.x + trans.x, center.y+ trans.y);
//这个是点击事件,因为都已经经过准确的计算,每次都有精确的偏移量所以不需要清理上次的偏移量
}
//第2种计算方式
//-(void)createPanGesture
//{
// UIPanGestureRecognizer *panGse = [[UIPanGestureRecognizer alloc]init];
//
// panGse.delegate = self;
//
// [panGse addTarget:self action:@selector(panGes1:)];
// [_imageView addGestureRecognizer:panGse];
//}
//-(void)panGes1:(UIPanGestureRecognizer *)ges
//{
// CGPoint point = [ges translationInView:ges.view];
//
// ges.view.transform = CGAffineTransformTranslate(ges.view.transform, point.x, point.y);
//
// //偏移量清零(这个事手势,如果每次手势调用都不清理会自动累加到下次,造成不精确,所以每次都要清理上次的偏移量,重新计算下次的,保证精确)这个没有经过准确的计算
////就是回到原先位置,然后从新计算,不然会累积到下次来
// [ges setTranslation:CGPointZero inView:ges.view];
//
//
//}
//和其他手势一起进行
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer
*)otherGestureRecognizer
{
return
YES;
}
@end
没错,这就是本公子了,哈哈。今天到此结束,大年30休息,(提前说下)就不更了,祝大家过个好年。