我正在尝试将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);
然后将偏移设置如下:
[self.scrollView setContentOffset:newOffset animated:YES];
问题是这不起作用。具体是什么? Y位置。
在每种情况下,所选节点 都会居中。但是,Y坐标完全是螺旋式的。如果我添加调整,它会向上或向下反向到我想要的位置。如果我减去它,它完全飞离屏幕。我不知道如何解决这个问题。
同样,如果我稍微缩放,X位置也会偏离轨道。我不明白为什么。我已经尝试根据缩放比例向上或向下缩放偏移调整,但它没有帮助。
这不是我唯一的尝试。我也尝试过这样使用UIScrollView的可见矩形:
[scrollView convertRect:scrollView.bounds
toView:[scrollView.delegate viewForZoomingInScrollView:scrollView]];
如果有人能解释如何做到这一点,我们将非常感激。
答案 0 :(得分:0)
我的最终解决方案如下:
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};
基本上,我必须使用负高度来获取背景中可见场景的中间Y坐标。就是这样。这也解决了缩放问题。
如果您遇到类似的问题。我建议通过在您认为中点应该在的位置添加Sprite或某种可见指示符来使用反复试验。继续调整直到你得到它,并确保它总是在你滚动的任何地方显示这个中点。然后,您可以使用节点和中点的差异来计算需要居中的偏移量。
希望这有助于某人。