//
//  PEMarkImageView.m
//  RNImageProssingView
//
//  Created by Hanson on 2019/6/26.
//  Copyright © 2019 Facebook. All rights reserved.
//

#import "PEMarkImageView.h"

@implementation PEMarkImageView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.userInteractionEnabled = YES;
//        self.multipleTouchEnabled = YES;
        self.scal = 1.0;
        
        [self addTapGesture];

        [self addPanGesture];
//        [self addPinchGesture];
//        [self addRotationGesture];
        
    }
    return self;
}

- (void)rotation {
    self.transform = CGAffineTransformRotate(self.transform ,M_PI_4 * 0.5);
}

#pragma mark - addGesture

- (void)addTapGesture {
    UITapGestureRecognizer *pinGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(chackCanEdit)];
    [self addGestureRecognizer:pinGesture];
}


//图片拖拉手势
- (void)addPanGesture {
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(changePoint:)];
    [self addGestureRecognizer:panGesture];
}

// 图片放大缩小手势
- (void)addPinchGesture {
    UIPinchGestureRecognizer *pinGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(changeScale:)];
    [self addGestureRecognizer:pinGesture];
    self.multipleTouchEnabled = YES;
}


//图片旋转手势
- (void)addRotationGesture {
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateImage:)];
    [self addGestureRecognizer:rotationGesture];
}

- (void)changePoint:(UIPanGestureRecognizer *)sender {
    if (![self chackCanEdit]) { return; }
    
    UIView *view = sender.view;
    if (sender.state == UIGestureRecognizerStateBegan ||
        sender.state == UIGestureRecognizerStateChanged) {
        CGPoint translation = [sender translationInView:view.superview];
        [view setCenter:CGPointMake(view.center.x +translation.x, view.center.y + translation.y)];
        [sender setTranslation:CGPointZero inView:view.superview];
        if ([self.delegate respondsToSelector:@selector(markViewUpdateFrameWithScal:)]) {
            [self.delegate markViewUpdateFrameWithScal:self.scal];
        }
    }
}


- (void)changeScale:(UIPinchGestureRecognizer *)sender {
    if (![self chackCanEdit]) { return; }
    
    UIView *view = sender.view;
    if (sender.state == UIGestureRecognizerStateBegan ||
        sender.state == UIGestureRecognizerStateChanged) {
        view.transform = CGAffineTransformScale(view.transform, sender.scale, sender.scale);
        self.scal *= sender.scale;
        sender.scale = 1.0;
        if ([self.delegate respondsToSelector:@selector(markViewUpdateFrameWithScal:)]) {
            [self.delegate markViewUpdateFrameWithScal:self.scal];
        }
    }
}


- (void)rotateImage:(UIRotationGestureRecognizer *)sender {
    if (![self chackCanEdit]) { return; }
    
    UIView *view = sender.view;
    if (sender.state == UIGestureRecognizerStateBegan ||
        sender.state == UIGestureRecognizerStateChanged) {
        view.transform = CGAffineTransformRotate(view.transform, sender.rotation);
        [sender setRotation:0];
    }
}

- (BOOL)chackCanEdit {
    [self.superview bringSubviewToFront:self];
    if ([self.delegate respondsToSelector:@selector(markViewImageViewEdit:)]) {
        return [self.delegate markViewImageViewEdit:self];
    }
    return YES;
}

@end
