Objective c Can';t将UIScrollView围绕y轴上的CG点居中,或在缩放时居中

Objective c Can';t将UIScrollView围绕y轴上的CG点居中,或在缩放时居中,objective-c,iphone,uiscrollview,Objective C,Iphone,Uiscrollview,我正在尝试将一个CGPoint置于可视矩形(即我的UIScrollView)的中心 以下是设置: 我有一个SpriteKit场景,上面有一些对象。这个场景基本上就是我的UIScrollView的视图。该场景比设备上的可见场景大得多,如可见矩形所示 我想设置UIScrollView的contentOffset,使一个点位于可见矩形的中心。 以下是我尝试过但没有成功的做法: CGPoint adjustment = CGPointMake(visibleRect.size.width/2

我正在尝试将一个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的visible rect:

[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};
基本上,我必须使用负高度来获得背景中可见场景的中间Y坐标。就这样。这也解决了缩放问题

如果你有类似的问题。我建议使用试错法,在你认为应该的中点添加一个精灵或某种可见指示器。不断调整,直到你得到它,并确保它总是显示这个中点,无论你滚动。然后,可以使用节点和中点之间的差值来计算居中所需的偏移

希望这对别人有帮助