如何在UIScrollView中从最小坐标位置缩放到最大坐标位置?

时间:2016-04-12 06:09:47

标签: ios objective-c uiscrollview uiimageview zooming

我有UIScrollView,其中包含UIImageView。我有要求在UIImageView中到达并缩放到特定位置。

因此,例如我想从(x:0,y:0)开始到指定位置。

最佳做法是什么?

这就是我实现这一目标的方式:

- (void) setInitialZoomLevelAndShowImageInCenter {    
    CGRect scrollViewFrame = scrollViewMap.frame;
    CGFloat scaleWidth = scrollViewFrame.size.width / scrollViewMap.contentSize.width;
    CGFloat scaleHeight = scrollViewFrame.size.height / scrollViewMap.contentSize.height;
    CGFloat minScale = MIN(scaleWidth, scaleHeight);

    scrollViewMap.minimumZoomScale = minScale/1.5;
    scrollViewMap.maximumZoomScale = 10.0f;
    scrollViewMap.zoomScale = minScale;

    CGFloat newZoomScale = scrollViewMap.zoomScale * 2.80f;

    CGFloat xPos = 0;
    CGFloat yPos = 0;
    BOOL isMatched = NO;
    while (!isMatched) {

        [self zoomToPoint:CGPointMake(xPos, yPos) withScale:newZoomScale animated:YES];

        BOOL isAnyChange = NO;
        if(xPos <= slotItem.xCord) {
            xPos+=1.0f;
            isAnyChange = YES;
        }
        if(yPos <= slotItem.yCord) {
            yPos+=1.0f;
            isAnyChange = YES;
        }
        if(!isAnyChange) {
            isMatched = YES;
        }
    }
}

- (void)zoomToPoint:(CGPoint)zoomPoint withScale: (CGFloat)scale animated: (BOOL)animated
{
    //Normalize current content size back to content scale of 1.0f
    CGSize contentSize;
    contentSize.width = (scrollViewMap.contentSize.width / scrollViewMap.zoomScale);
    contentSize.height = (scrollViewMap.contentSize.height / scrollViewMap.zoomScale);

    //derive the size of the region to zoom to
    CGSize zoomSize;
    zoomSize.width = scrollViewMap.bounds.size.width / scale;
    zoomSize.height = scrollViewMap.bounds.size.height / scale;

    //offset the zoom rect so the actual zoom point is in the middle of the rectangle
    CGRect zoomRect;
    zoomRect.origin.x = zoomPoint.x - zoomSize.width / 2.0f;
    zoomRect.origin.y = zoomPoint.y - zoomSize.height / 2.0f;
    zoomRect.size.width = zoomSize.width;
    zoomRect.size.height = zoomSize.height;

    //apply the resize
    [scrollViewMap zoomToRect: zoomRect animated: animated];
}

0 个答案:

没有答案