我有一个“世界观”,可以说,它由UIScrollView上的一个大的可缩放区域组成。当我捏缩放时,我想要几个按钮来保留它们的世界位置,就像谷歌地图中的引脚一样。我一直在尝试的代码(我已经编写了几个小时,但我觉得这听起来不错......虽然我可能只是被烧掉了)是:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGPoint center = button.center;
center.y = center.y * scrollView.zoomScale;
center.x = center.x * scrollView.zoomScale;
button.center = center;
NSLog(@"Button coordinates are %f, %f, zoomScale is %f", button.center.x, button.center.y, scrollView.zoomScale);
}
谁能看到我做错了什么?
提前致谢!
答案 0 :(得分:2)
我通过在视图加载时仅设置CGPoint“center”一次,然后根据原始位置计算新的中心点来解决这个问题。
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGPoint newCenter = center; //center is set at load time, and only once
newCenter.y = center.y * scrollView.zoomScale; //new center is calculated on original position
newCenter.x = center.x * scrollView.zoomScale;
button.center = newCenter;
NSLog(@"Button coordinates are %f, %f, zoomScale is %f", button.center.x, button.center.y, scrollView.zoomScale);
}
对于错误地提出这个问题感到抱歉,彼得。
答案 1 :(得分:1)
你不需要自己做所有的数学运算。 UIScrollView的基类UIView有四种在坐标系之间进行转换的方法,在UIScrollView的情况下进行缩放和平移:
– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
上的UIView文档