UIScrollView 手势放大、连续点击放大

复制代码
//
//  ViewController.m
//  TestUIScrollView
//
//  Created by on 15-3-16.
//  Copyright (c) 2015年 va. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>

@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIImageView *imgView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    _scrollView.delegate = self;
    _scrollView.minimumZoomScale = 1.0;
    _scrollView.maximumZoomScale = 2.0;
    [self.view addSubview:_scrollView];
    
    _imgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    [_scrollView addSubview:_imgView];
    [_imgView setImage:[UIImage imageNamed:@"img.jpg"]];
    _imgView.contentMode = UIViewContentModeScaleAspectFit;
    
    UITapGestureRecognizer *doubleTapGez = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleClick:)];
    doubleTapGez.numberOfTapsRequired = 2;
    doubleTapGez.numberOfTouchesRequired = 1;
    
    [_imgView addGestureRecognizer:doubleTapGez];
    [_imgView setUserInteractionEnabled:YES];
    

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return _imgView;
}


- (void)doubleClick:(UITapGestureRecognizer *)tapGez
{
    CGPoint pointInView = [tapGez locationInView:_imgView];
    CGFloat zoomScale = _scrollView.zoomScale * 2;
    CGFloat scale = MIN(zoomScale, _scrollView.maximumZoomScale);
    
    CGFloat w = _scrollView.bounds.size.width / scale;
    CGFloat h = _scrollView.bounds.size.height / scale;
    
    CGFloat x = pointInView.x - (w/2.0);
    CGFloat y = pointInView.y - (h/2.0);
    
    
    
    CGRect rect = CGRectMake(x, y, w, h);
    
    return [_scrollView zoomToRect:rect animated:YES];
}

@end
复制代码

 

posted @   兜兜有糖的博客  阅读(352)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示