无法在 y 轴上或缩放时将 UIScrollView 围绕 CGPoint 居中
Can't center UIScrollView around CGPoint on y axis, or when zoomed
我正在尝试将 CGPoint 置于我的 UIScrollView 可见矩形内的中心。
设置如下:
我有一个 SpriteKit 场景,上面有一些物体。这个场景基本上就是我的 UIScrollView 的视图。场景比设备上的可见场景大得多,如可见矩形所示。
我想设置 UIScrollView 的 contentOffset,使一个点位于可见矩形的中心。
以下是我尝试过的方法,但无济于事:
CGPoint adjustment = CGPointMake(visibleRect.size.width/2, visibleRect.size.height/2);
CGPoint wantedMidPoint = node.position;
CGPoint newOffset = CGPointMake(wantedMidPoint.x - adjustment.x, wantedMidPoint.y + adjustment.y);
然后设置Offset如下:
[self.scrollView setContentOffset:newOffset animated:YES];
问题是这不起作用。具体是什么? Y 位置。
在每种情况下,所选节点确实居中。然而,Y 坐标完全是扭曲的。如果我添加调整,它会按照我想要的方向 反向 上升或下降。如果我减去它,它就会完全飞出屏幕。我不知道如何解决这个问题。
还有,如果我放大一点,X 位置也会偏离轨道。我不明白为什么。我已经尝试根据缩放比例向上或向下缩放偏移调整,但它没有帮助。
这不是我唯一的尝试。我也尝试过以这种方式使用 UIScrollView 的可见矩形:
[scrollView convertRect:scrollView.bounds
toView:[scrollView.delegate viewForZoomingInScrollView:scrollView]];
如果有人能解释如何做到这一点,将不胜感激。
我终于解决了。这是坐标系工作方式的一些非常古怪的行为。
我最终的解决方案如下:
CGPoint midPoint = [self convertPoint:(CGPoint){self.visibleRect.size.width/2,-self.visibleRect.size.height/2} toNode:self.sceneNode];
CGVector adjustment = (CGVector){node.position.x - midPoint.x, node.position.y - midPoint.y};
基本上,我不得不使用negative高度来获取背景中可见场景的中间Y坐标。就是这样。这也解决了缩放问题。
如果您遇到类似的问题。我建议通过在您认为中点应该位于的位置添加 Sprite 或某种可见指示器来使用试错法。不断调整直到你得到它,并确保它总是在你滚动的任何地方显示这个中点。然后你可以使用你的节点和中点的差异来计算你需要居中的偏移量。
希望这对某人有所帮助。
我正在尝试将 CGPoint 置于我的 UIScrollView 可见矩形内的中心。
设置如下:
我有一个 SpriteKit 场景,上面有一些物体。这个场景基本上就是我的 UIScrollView 的视图。场景比设备上的可见场景大得多,如可见矩形所示。
我想设置 UIScrollView 的 contentOffset,使一个点位于可见矩形的中心。
以下是我尝试过的方法,但无济于事:
CGPoint adjustment = CGPointMake(visibleRect.size.width/2, visibleRect.size.height/2);
CGPoint wantedMidPoint = node.position;
CGPoint newOffset = CGPointMake(wantedMidPoint.x - adjustment.x, wantedMidPoint.y + adjustment.y);
然后设置Offset如下:
[self.scrollView setContentOffset:newOffset animated:YES];
问题是这不起作用。具体是什么? Y 位置。
在每种情况下,所选节点确实居中。然而,Y 坐标完全是扭曲的。如果我添加调整,它会按照我想要的方向 反向 上升或下降。如果我减去它,它就会完全飞出屏幕。我不知道如何解决这个问题。
还有,如果我放大一点,X 位置也会偏离轨道。我不明白为什么。我已经尝试根据缩放比例向上或向下缩放偏移调整,但它没有帮助。
这不是我唯一的尝试。我也尝试过以这种方式使用 UIScrollView 的可见矩形:
[scrollView convertRect:scrollView.bounds
toView:[scrollView.delegate viewForZoomingInScrollView:scrollView]];
如果有人能解释如何做到这一点,将不胜感激。
我终于解决了。这是坐标系工作方式的一些非常古怪的行为。
我最终的解决方案如下:
CGPoint midPoint = [self convertPoint:(CGPoint){self.visibleRect.size.width/2,-self.visibleRect.size.height/2} toNode:self.sceneNode];
CGVector adjustment = (CGVector){node.position.x - midPoint.x, node.position.y - midPoint.y};
基本上,我不得不使用negative高度来获取背景中可见场景的中间Y坐标。就是这样。这也解决了缩放问题。
如果您遇到类似的问题。我建议通过在您认为中点应该位于的位置添加 Sprite 或某种可见指示器来使用试错法。不断调整直到你得到它,并确保它总是在你滚动的任何地方显示这个中点。然后你可以使用你的节点和中点的差异来计算你需要居中的偏移量。
希望这对某人有所帮助。