美文网首页
变形和手势

变形和手势

作者: 我不白先生 | 来源:发表于2020-11-13 21:37 被阅读0次
image.png

添加手势


image.png

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

相关文章

网友评论

      本文标题:变形和手势

      本文链接:https://www.haomeiwen.com/subject/rtupbktx.html