UIGestureRecognizer

#import "HLPanViewController.h"
#import "Masonry.h"

@interface HLPanViewController ()

@property (nonatomic, strong) UIImageView *imgView;
@property (nonatomic, assign) CGFloat lastScale;

@end

@implementation HLPanViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"redPackets_open"]];
    self.imgView.userInteractionEnabled = YES;
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandler:)];
    [self.imgView addGestureRecognizer:pan];
    
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationHandler:)];
    [self.view addGestureRecognizer:rotation];
    
    [self.view addSubview:self.imgView];
    
    [self.imgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.width.height.equalTo(@50);
    }];
    
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchHandler:)];
    [self.view addGestureRecognizer:pinch];
}

- (void)panHandler:(UIPanGestureRecognizer *)gesture {
    CGPoint transP = [gesture translationInView:self.imgView];
    NSLog(@"transp x: %f  y: %f", transP.x, transP.y);
    self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transP.x, transP.y);
    [gesture setTranslation:CGPointZero inView:self.imgView];
}

- (void)pinchHandler:(UIPinchGestureRecognizer *)gesture {
    switch (gesture.state) {
        case UIGestureRecognizerStateBegan:
            
            break;
        case UIGestureRecognizerStateChanged:
        {
            CGFloat currentScale = [[self.imgView.layer valueForKeyPath:@"transform.scale"] floatValue];
            CGFloat newScale = gesture.scale - self.lastScale + 1;
            
            NSLog(@"currentScale:%f gestureScale:%f lastScale:%f newScale:%f", currentScale, gesture.scale, self.lastScale, newScale);
            newScale = MIN(newScale, 5 / currentScale);
            newScale = MAX(newScale, 1 / currentScale);
            
            self.imgView.transform = CGAffineTransformScale(self.imgView.transform, newScale, newScale);

            self.lastScale = gesture.scale;
        }
            break;
        case UIGestureRecognizerStateEnded:
            self.lastScale = 1;
            break;
        default:
            break;
    }
}

- (void)rotationHandler:(UIRotationGestureRecognizer *)gesture {
        if (gesture.state == UIGestureRecognizerStateBegan || gesture.state == UIGestureRecognizerStateChanged) {
            self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, M_PI/20);
            NSLog(@"%f",gesture.rotation);
            [gesture setRotation:0];
        }
    
        
        //3d旋转效果
//        CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
//        rotationAndPerspectiveTransform.m34 = 1.0 / -500;
//        rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform,gesture.rotation, 0.0f, 1.0f, 0.0f);
//        self.imgView.layer.transform = rotationAndPerspectiveTransform;
}

@end

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值