zoukankan      html  css  js  c++  java
  • 模拟系统照相机图片裁剪的功能

    模拟系统照相机图片裁剪的功能

    效果如下:

    源码:

    //
    //  RootViewController.m
    //  ScrollView
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    
    @interface RootViewController ()<UIScrollViewDelegate>
    
    {
        BOOL tapped;
    }
    
    @property (nonatomic, strong) UIScrollView           *scrollView;
    @property (nonatomic, strong) UIImageView            *imageView;
    @property (strong, nonatomic) UITapGestureRecognizer *tapGesture;
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor blackColor];
        
        // scrollView
        {
            _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
            [self.view addSubview:_scrollView];
            
            _scrollView.center              = self.view.center;
            _scrollView.delegate            = self;
            _scrollView.layer.borderWidth   = 2.f;
            _scrollView.layer.borderColor   = [UIColor redColor].CGColor;
            _scrollView.layer.masksToBounds = NO;
            
            // 不显示滚动的条
            _scrollView.showsHorizontalScrollIndicator = NO;
            _scrollView.showsVerticalScrollIndicator   = NO;
    
            _scrollView.bouncesZoom      = YES;
            _scrollView.minimumZoomScale = 1.f;
            _scrollView.maximumZoomScale = 10.f;
            _scrollView.contentMode      = UIViewContentModeScaleAspectFit;
        }
        
        // 图片
        _imageView       = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
        _imageView.image = [UIImage imageNamed:@"back"];
        _imageView.contentMode = UIViewContentModeScaleAspectFit;
        [_scrollView addSubview:_imageView];
        
        // 手势
        _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                              action:@selector(tapRecognized:)];
        [_scrollView addGestureRecognizer:_tapGesture];
    }
    
    - (void)tapRecognized:(id)sender
    {
        if (!tapped)
        {
            CGPoint tapPoint = [self.tapGesture locationOfTouch:0
                                                         inView:self.tapGesture.view];
            CGRect zoomRect = [self zoomRectForScrollView:self.scrollView
                                                withScale:6.0f
                                               withCenter:tapPoint];
            [self.scrollView zoomToRect:zoomRect animated:YES];
            tapped = YES;
        }
        else
        {
            [self.scrollView setZoomScale:1.0f animated:YES];
            tapped = NO;
        }
    }
    
    
    - (CGRect)zoomRectForScrollView:(UIScrollView *)scrollView
                          withScale:(float)scale
                         withCenter:(CGPoint)center
    {
        CGRect zoomRect;
        zoomRect.size.height = scrollView.frame.size.height / scale;
        zoomRect.size.width  = scrollView.frame.size.width / scale;
        zoomRect.origin.x    = center.x - (zoomRect.size.width / 2.0);
        zoomRect.origin.y    = center.y - (zoomRect.size.height / 2.0);
        return zoomRect;
    }
    
    #pragma mark - UIScrollView代理方法
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return self.imageView;
    }
    
    @end

    一个需要注意的地方:

    需要将图片的view在UIScrollView的代理方法中传递出去

    至于这有怎么样的用处,如果有需求需要你截取图片的某一个区域,这时候你就知道有啥用了:)

     
  • 相关阅读:
    DEVOPS技术实践_02:jenkins自动构建项目
    DEVOPS技术实践_01:jenkins集成平台
    nginx和keeplive实现负载均衡高可用
    web简易MP3播放插件 Aplayer篇章一
    龙珠MAD-视频列表(收集更新)
    使用咪咕云做C站视频直链源
    自翻唱龙珠超OP2【限界突破X幸存者】
    龙珠超的新OP【限界突破×サバイバー】
    [盘点]现今热门的h5网游
    一个简单的“贪吃蛇”小游戏
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3936453.html
Copyright © 2011-2022 走看看