IOS学习笔记41--图片的缩放(二)

今天的重点:利用ScrollView进行图片的缩放

直接先说原理吧--原理:利用了scrollview的回调函数(如下)以及scrollview自己内部的一些缩放规则(其实我也还没弄清楚具体scrollview干了什么事),只是知道了它可以怎么做-_-#

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{

    returnself.zoomImageView;

}

其实今天的缩放部分我还加上了常见的  双击图片的缩小与放大,先上代码:

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

       //自身属性的一些设置 

        NSLog(@"%@",NSStringFromCGRect(frame));

        self.delegate =self;

        self.showsVerticalScrollIndicator =NO;

        self.showsHorizontalScrollIndicator =NO;

        self.maximumZoomScale =3;

        

        //承载当前图片的imageview

        self.zoomImageView = [[[UIImageViewalloc] init] autorelease];

        self.zoomImageView.userInteractionEnabled =YES;

        self.zoomImageView.frame =CGRectMake(0.0f, 0.0f, frame.size.width  , frame.size.height);

        self.zoomImageView.image = [UIImageimageNamed:@"lichengwu.jpeg"];

        [self addSubview:self.zoomImageView];

        

        // Add gesture,double tap zoom imageView.

        UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizeralloc] initWithTarget:self

                                                                                          action:@selector(handleDoubleTap:)];

        [doubleTapGesture setNumberOfTapsRequired:2];

        [ self.zoomImageViewaddGestureRecognizer:doubleTapGesture];

        [doubleTapGesture release];

        

        //  initialize tapclicks

        tapClicks = NO;

    }

    return self;

}

接着上代码:

#pragma mark - Zoom methods


- (void)handleDoubleTap:(UIGestureRecognizer *)gesture

{


    float newScale;

    if (!tapClicks) {

        newScale = self.zoomScale *2.0;

    }

    else{

        newScale = self.zoomScale *0.0;

    }

    CGRect zoomRect = [selfzoomRectForScale:newScale withCenter:[gesturelocationInView:gesture.view]];

    [self zoomToRect:zoomRectanimated:YES];

    tapClicks = !tapClicks;

}

这一部分也是相当的一目了然,就是处理双击事件函数,是缩小还是放大,正正的处理图片的函数如下:

#pragma mark - CommonMethods

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center

{

    CGRect zoomRect;

    zoomRect.size.height =self.frame.size.height / scale;

    zoomRect.size.width  =self.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;

}

看见原理了没,其实就是获得当前点击处的中心X与原来图片尺寸的差值,然后传递给Scrollview进行缩放,至于scrollview具体干了什么事情,这就要让喜欢刨根问底的童鞋用一些力气了,然后@给我哦。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值