
添加手势

ViewController.m
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (IBAction)tapGesture:(id)sender {
self.imageView.transform =CGAffineTransformIdentity;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//位移
//带make位移,视图移动是相对于变化前的位置再叠加x y的偏移量
//self.imageView.transform = CGAffineTransformMakeTranslation(25, 25);
//不带make位移,视图移动会在当前变形基础上继续叠加x y的偏移量
self.imageView.transform =CGAffineTransformTranslate(self.imageView.transform, 25, 25);
NSLog(@"%@",NSStringFromCGAffineTransform(self.imageView.transform));
//缩放
// self.imageView.transform = CGAffineTransformScale(self.imageView.transform, 1.5, 1.5);
// NSLog(@"%@",NSStringFromCGAffineTransform(self.imageView.transform));
// //旋转
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4);
NSLog(@"%@",NSStringFromCGAffineTransform(self.imageView.transform));
}
手势加变形
ViewController.m
@interface ViewController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property(nonatomic,assign) CGPoint startPos;
@end
@implementation ViewController
//需要手势共存的代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//如果需要手势 共存 就需要设置共存手势的代理,需要谁共存 就设置谁的代理
//变形
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
[self.view addGestureRecognizer:panGR];
//捏合手势
UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)];
pinchGR.delegate = self;
[self.view addGestureRecognizer:pinchGR];
UIRotationGestureRecognizer *rotationGR = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
rotationGR.delegate = self;
[self.view addGestureRecognizer:rotationGR];
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
rotationGR.delegate = self;
[self.view addGestureRecognizer:tapGR];
}
-(void)tap:(UITapGestureRecognizer*)sender{
self.imageView.transform = CGAffineTransformIdentity;
}
-(void)rotation:(UIRotationGestureRecognizer*)sender{
//sender.rotation这是一个弧度值
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, sender.rotation);
sender.rotation = 0;
}
-(void)pinch:(UIPinchGestureRecognizer*)sender{
//sender.scale;
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, sender.scale, sender.scale);
sender.scale = 1;
}
-(void)pan:(UIPanGestureRecognizer*)sender{
self.imageView.center = [sender locationInView:self.view];
// if (sender.state == UIGestureRecognizerStateBegan) {
// self.startPos = [sender locationInView:self.view];
// }else if (sender.state == UIGestureRecognizerStateChanged){
// CGPoint currentPos = [sender locationInView:self.view];
// CGPoint movePos = CGPointMake(currentPos.x - self.startPos.x, currentPos.y - self.startPos.y);
// CGPoint center = self.imageView.center;
// center.x += movePos.x;
// center.y += movePos.y;
// self.imageView.center = center;
// self.startPos = currentPos;
// }
//translationInView 得到的是现对于 手势起点的位置
// CGPoint translation = [sender translationInView:self.view];
// CGPoint center = self.imageView.center;
// center.x += translation.x;
// center.y += translation.y;
// self.imageView.center =center;
// //清楚translation之前累加的值
// [sender setTranslation:CGPointZero inView:self.view];
CGPoint translation = [sender translationInView:self.view];
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, translation.x, translation.y);
//清楚translaiton之前累加的值
[sender setTranslation:CGPointZero inView:self.view];
}
封装手势
ViewController.m
#import "ViewController.h"
#import "ClickImageView.h"
@interface ViewController ()<ClickImageViewDelegate>
@property(nonatomic,strong)ClickImageView *civ;
@property (weak, nonatomic) IBOutlet ClickImageView *storyboardIV;
@end
@implementation ViewController
-(void)clickImageView:(ClickImageView *)iv didTLongPressWithUILongPressGestureRecognizer:(UILongPressGestureRecognizer *)gesture{
NSLog(@"长按手势的代理方法");
}
//-(void)clickImageView:(ClickImageView *)iv didTLongPressWithPosition:(CGPoint)pos{
// //判断 开始 变化 结束
// NSLog(@"点中了imageView的%@位置",NSStringFromCGPoint(pos));
//}
-(void)clickImageView:(ClickImageView *)iv didTapWithPosition:(CGPoint)pos{
NSLog(@"点击手势的代理方法");
}
-(ClickImageView *)civ{
if(!_civ){
_civ = [[ClickImageView alloc]initWithFrame:CGRectMake(50, 50, 300, 200)];
_civ.delegate = self;
_civ.image = [UIImage imageNamed:@"新歌榜"];
[self.view addSubview:_civ];
}
return _civ;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self civ];
self.storyboardIV.delegate = self;
}
ClickImageView.m
#import "ClickImageView.h"
@implementation ClickImageView
//通过故事板创建对象 会调用
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
[self addGestureRecognizer];
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self addGestureRecognizer];
}
return self;
}
-(instancetype)initWithImage:(UIImage *)image{
if (self = [super initWithImage:image]) {
[self addGestureRecognizer];
}
return self;
}
-(void)addGestureRecognizer{
self.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
UILongPressGestureRecognizer *longPressGR = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
longPressGR.minimumPressDuration = 2;
[self addGestureRecognizer:tapGR];
[self addGestureRecognizer:longPressGR];
}
-(void)tap:(UITapGestureRecognizer*)sender{
[self.delegate clickImageView:self didTapWithPosition:[sender locationInView:self]];
}
-(void)longPress:(UILongPressGestureRecognizer*)sender{
//传出来的手势
[self.delegate clickImageView:self didTLongPressWithUILongPressGestureRecognizer:sender];
}
@end
网友评论