无法在y轴上或放大时将UIScrollView置于CGPoint周围

时间:2015-06-28 18:47:20

标签: objective-c iphone uiscrollview

我正在尝试将CGPoint置于可见矩形内部,这是我的UIScrollView。

以下是设置:

enter image description here

我有一个SpriteKit场景,上面有一些对象。这个场景基本上是我的UIScrollView的视图。场景比设备上的可见场景大得多,如可见矩形所示。

我想设置UIScrollView的contentOffset,以便一个点位于可见矩形的中心。

enter image description here

这是我尝试过的,无济于事:

    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]];

如果有人能解释如何做到这一点,我们将非常感激。

1 个答案:

答案 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或某种可见指示符来使用反复试验。继续调整直到你得到它,并确保它总是在你滚动的任何地方显示这个中点。然后,您可以使用节点和中点的差异来计算需要居中的偏移量。

希望这有助于某人。