我写了一个View
SimpleView.h
//
// SimpleView.h
// Demo
//
// Created by SimpleView on 2017/7/11.
// Copyright © 2017年 SimpleView. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface SimpleView : UIView
@end
SimpleView.m
//
// SimpleView.m
// Demo
//
// Created by SimpleView on 2017/7/11.
// Copyright © 2017年 SimpleView. All rights reserved.
//
#import "SimpleView.h"
@implementation SimpleView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// 拖动
[self addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]];
// 缩放
[self addGestureRecognizer:[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)]];
// 旋转
[self addGestureRecognizer:[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)]];
}
return self;
}
#pragma mark - 手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 如果父视图也实现了Pan手势,放到子视图后可能会造成子视图Pan手势失效,需要特殊处理一下
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && ![gestureRecognizer.view isEqual:self])
{
return NO;
}
return [super gestureRecognizerShouldBegin:gestureRecognizer];
}
- (void)panAction:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
piece.center = CGPointMake(piece.center.x + translation.x, piece.center.y + translation.y);
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
- (void)pinchAction:(UIPinchGestureRecognizer *)gestureRecognizer
{
self.transform = CGAffineTransformScale(self.transform, gestureRecognizer.scale, gestureRecognizer.scale);
gestureRecognizer.scale = 1.0f;
}
- (void)rotationAction:(UIRotationGestureRecognizer *)gestureRecognizer
{
self.transform = CGAffineTransformRotate(self.transform, gestureRecognizer.rotation);
gestureRecognizer.rotation = 0;
}
@end