繁体   English   中英

无法在y轴上或缩放时使CGPoint围绕UIScrollView居中

[英]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);

然后,将偏移设置如下:

[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};

基本上,我必须使用高度来获取背景中可见场景的中间Y坐标。 就是这样。 这也解决了缩放问题。

如果您遇到类似的问题。 我建议通过在您认为中点应该出现的位置添加Sprite或某种可见的指示器来使用试错法。 不断调整直到得到它,并确保它始终在滚动的任何位置显示此中点。 然后,您可以使用节点和中点的差来计算需要居中的偏移量。

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM