开发者社区> 游贤明> 正文

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

简介:
+关注继续查看

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

效果如下:

源码:

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
面向照相机的开发
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6509018 这里主要讲述一下面向手机中照相机的应用开发。
578 0
模拟油画和铅笔画的滤镜效果
模拟油画和铅笔画的滤镜效果
62 0
【ThreeJs】(2)照相机 | 正交投影照相机 | 透视投影照相机
【ThreeJs】(2)照相机 | 正交投影照相机 | 透视投影照相机
75 0
chrome内核 用h5调用高拍仪(摄像图)实现拍证件照
chrome内核 用h5调用高拍仪(摄像图)实现拍证件照
55 0
Threejs - 灯光?投影?? 有光的地方就会有影子
Threejs - 灯光?投影?? 有光的地方就会有影子
216 0
照相机预览、拍照以及适配问题的完美解决
         前段时间在做face++相关的功能,对于照相机也是进行了一番研究,小有收获,很感谢有一些大神已经写了相应的博客,让我在他们的项目上进行完善和优化,修复了一些bug,并对机型适配做了一些处理,目前已经保证了团队里面十多部安卓手机的完美适配,具体项目资源可以在http://download.csdn.net/detail/shan286/9799622这个网址上下载。
1318 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
3D动画的菜谱式灯光与云渲染
立即下载
360°全景视频播放器的实现原理
立即下载
骨骼动画实践
立即下载