文章目录
  1. 1. 图片缩放
  2. 2. 实现步骤
  3. 3. 代码

图片缩放

  • 使用各种手势实现图片的缩放预览,移动等
  • 主要是使用手势来实现,包括UIRotationGestureRecognizerUITapGestureRecognizerUIPinchGestureRecognizerUIPanGestureRecognizer

实现步骤

  • 定义一个view ,然后将UIImageView对象添加到里面,给UIImageView添加各种手势。
  • 效果图如下:

代码

#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
#import "ViewController.h"

@interface ViewController ()

/**保存图片原来的大小*/
@property (nonatomic, assign) CGRect oldFrame;
/**确定图片放大最大的程度*/
@property (nonatomic, assign) CGRect largeFrame;
/**图片原始属性*/
@property (nonatomic, assign) CGAffineTransform oldTransform;

@property (weak, nonatomic) IBOutlet UIView *RootView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

/// 加载图片
[_imageView setMultipleTouchEnabled:YES];
[_imageView setUserInteractionEnabled:YES];
[_imageView setImage:[UIImage imageNamed:@"1"]];

_oldFrame = self.imageView.frame;
_oldTransform = self.imageView.transform;
_largeFrame = CGRectMake(0 - ScreenWidth, 0 - ScreenHeight, 3 * _oldFrame.size.width, 3 * _oldFrame.size.height);
/// 添加手势
[self addGestureRecognizerToView:self.imageView];
}

// 添加所有的手势
- (void) addGestureRecognizerToView:(UIView *)view
{
// 旋转手势
UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)];
[view addGestureRecognizer:rotationGestureRecognizer];

/// 点击手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleClick:)];
[view addGestureRecognizer:tap];

// 缩放手势
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[view addGestureRecognizer:pinchGestureRecognizer];

// 移动手势
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
[view addGestureRecognizer:panGestureRecognizer];
}

// 处理旋转手势
- (void) rotateView:(UIRotationGestureRecognizer *)rotationGestureRecognizer
{
UIView *view = rotationGestureRecognizer.view;
view.transform = CGAffineTransformRotate(view.transform, rotationGestureRecognizer.rotation);
[rotationGestureRecognizer setRotation:0];
if (rotationGestureRecognizer.state == UIGestureRecognizerStateBegan || rotationGestureRecognizer.state == UIGestureRecognizerStateChanged) {
}
}

// 处理缩放手势
- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
UIView *view = pinchGestureRecognizer.view;
if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {
view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
/// 控制一下缩放的大小
if (_imageView.frame.size.width < _oldFrame.size.width) {
_imageView.frame = _oldFrame;
//让图片无法缩得比原图小
}
if (_imageView.frame.size.width > 3 * _oldFrame.size.width) {
_imageView.frame = _largeFrame;
}
pinchGestureRecognizer.scale = 1;
}
}

// 处理拖拉手势
- (void) panView:(UIPanGestureRecognizer *)panGestureRecognizer
{
UIView *view = panGestureRecognizer.view;
if (panGestureRecognizer.state == UIGestureRecognizerStateBegan || panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
CGPoint translation = [panGestureRecognizer translationInView:view.superview];
[view setCenter:(CGPoint){view.center.x + translation.x, view.center.y + translation.y}];
[panGestureRecognizer setTranslation:CGPointZero inView:view.superview];
}
}

/// 点击手势,恢复原始状态
- (void)doubleClick:(UITapGestureRecognizer *)tapGestureRecognizer {
UIView *view = tapGestureRecognizer.view;
if (tapGestureRecognizer.state == UIGestureRecognizerStateEnded) {
view.transform = _oldTransform;
view.frame = _oldFrame;
}
}
文章目录
  1. 1. 图片缩放
  2. 2. 实现步骤
  3. 3. 代码