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的代理方法中传递出去

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

     
  • 相关阅读:
    HTML5元素标记释义
    Mvc使用Partial View 来封装上传控件
    订单页过滤,sql写法
    防止提交重复订单的方法
    查询数据库所有列
    asp.net 异常处理
    7. DateTime,TimeSpan
    8.1.thread
    8.2.Task
    2.2. Array
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3936453.html
Copyright © 2011-2022 走看看