我很难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;
}
这看起来正确吗?有没有更好的办法?谢谢!