相对于 ADBannerView 定位对象

Positioning objects relative to an ADBannerView

我一直在努力思考 iAd 横幅视图的坐标,这显然有其自身的规律。我在屏幕底部有一个横幅视图,我也是这样定义的:

    adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    CGRect adFrame = adView.frame;
    adFrame.origin.y = self.scene.view.frame.size.height - adView.frame.size.height;
    adView.frame = adFrame;
    [self.view addSubview:adView];

(这是在 sprite kit 场景中)所以现在,我想相对于这个横幅视图定位一个 object/node。我把这个对象放在比横幅高 5 的第一直觉是说

node.position = CGPointMake(CGRectGetMidX(self.frame), adView.frame.size.height + 5);

然而,这并没有给我任何有希望的结果,所以我决定对其进行硬编码,结果证明,如果我将 y 值设置在 64ish 左右,我就能得到我想要的东西。我在 iPhone 6 上测试了这个值,它给了我想要的东西,但是当我在 iPhone 5 上尝试它时,它在横幅视图下消失了。 iPhone adBannerView 的高度如果不管什么型号都是50,这好像很矛盾。

任何帮助将不胜感激,谢谢!

问题是您的场景正在缩放,因此您指定的位置会因设备而异。您希望相对于 view 定位您的节点,因为那是您的横幅所在的位置。为此,您可以使用 SKView 的 convertPointToScene 方法将视图坐标转换为场景坐标。有关更多信息,请参阅我关于相对于视图定位节点的回答

您也可以选择完全不缩放场景,方法是将场景的 scaleMode 设置为 ResizeFill。这将导致您的位置在所有设备上保持一致,因为您的坐标不会缩放。您可以在此处查看我关于场景缩放的回答 here 以获取更多信息。