在缩放时查找UIScrollView的中心点

时间:2010-07-13 00:11:19

标签: iphone uiscrollview tiling

我很难通过缩放缩放来平铺UIScrollView以正确放大和缩小。问题在于,当发生缩放缩放时,生成的视图通常不会在同一区域中居中。

详细信息:应用程序以500x500的平铺图像开始。如果用户放大,它将捕捉到1000x1000并且图块将重绘。对于所有缩放影响等,我只是让UIScrollView做它的事情。调用scrollViewDidEndZooming:withView:atScale:时,我会重新绘制切片(就像您在许多示例和其他问题中看到的那样)。

认为当我到达scrollViewDidEndZooming:withView:atScale:时,我已经将问题深入到了正确计算视图中心的位置(我可以在重绘之后将已知点放在中心位置)

我目前使用的是:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
    // as an example, create the "target" content size
    CGSize newZoomSize = CGSizeMake(1000, 1000);

    // get the center point
    CGPoint center = [scrollView contentOffset];
    center.x += [scrollView frame].width / 2;
    center.y += [scrollView frame].height / 2;

    // since pinch zoom changes the contentSize of the scroll view, translate this point to 
    // the "target" size (from the current size)
    center = [self translatePoint:center currentSize:[scrollView contentSize] newSize:newZoomSize];

    // redraw...
}

/*
    Translate the point from one size to another
*/
- (CGPoint)translatePoint:(CGPoint)origin currentSize:(CGSize)currentSize newSize:(CGSize)newSize {
    // shortcut if they are equal
    if(currentSize.width == newSize.width && currentSize.height == newSize.height){ return origin; }

    // translate
    origin.x = newSize.width * (origin.x / currentSize.width);
    origin.y = newSize.height * (origin.y / currentSize.height);
    return origin;
}

这看起来是否正确?有没有更好的办法?谢谢!

2 个答案:

答案 0 :(得分:1)

到目前为止我解决这个问题的方法是在变焦开始时存储视图的初始中心点。我最初在调用scrollViewDidScroll方法时保存此值(并且滚动视图正在缩放)。调用scrollViewDidEndZooming:withView:atScale:时,我使用该中心点(并重置保存的值)。

答案 1 :(得分:0)

可以通过添加它的center属性找到scrollview的中心,它是contentOffset属性。

 aView.center = CGPointMake(
     self.scrollView.center.x + self.scrollView.contentOffset.x,
     self.scrollView.center.y + self.scrollView.contentOffset.y);