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具体干了什么事情,这就要让喜欢刨根问底的童鞋用一些力气了,然后@给我哦。