【问题标题】:Removing the link/constriants between the StackLayoutView and its child view in IOS swift在 IOS swift 中删除 StackLayout 视图与其子视图之间的链接/约束
【发布时间】:2018-09-25 15:00:47
【问题描述】:

我正在开发一款 IOS 游戏。因为我刚开始学习IOS开发,所以真的是基本简单的游戏作为学习目的。我的游戏是一个简单的赛车游戏,用户将移动他或她的汽车并拖动图像,其他汽车将不断从顶部生成。当他们互相击中时,游戏结束。正如您在下面的屏幕截图中看到的那样。

现在,我可以拖动汽车并检测与其他汽车的碰撞。现在的问题是我可以将我的车拖到屏幕上的任何地方。我现在要做的是将道路图像放入堆栈布局视图并裁剪背景图像以仅获取道路。然后将道路图像设置为堆栈布局视图的背景。然后将主屏幕背景设置为绿色。所以用户只能在堆栈视图中移动他或她的汽车。现在我将堆栈视图添加到主视图中。 我将堆栈视图的大小设置为与主视图相同,像这样设置常量。

当我添加这四个约束时,汽车图像也变成了全屏尺寸。当我更改汽车图像时,堆栈视图的大小会调整为与汽车相同的大小。所以我的问题是如何将堆栈视图用作组布局视图,而不是作为包装器,以删除该尺寸限制?比如android中的linearlayout。

【问题讨论】:

    标签: ios swift uistackview


    【解决方案1】:

    我会在这里提出不同的策略。您可以将主视图设置为绿色,然后在其上添加另一个 UIImageView(使用道路图像资产)。你的车可能是另一个图像视图,上面可能有平移手势,你可以通过编程设置一个限制,这样它就不会“离开”道路。

    func didPan(_ gesture: UIPanGestureRecognizer) {
        //calculating new car position
        let fingerPosition = gesture.location(in: view)
        let minPosition = roadImageView.frame.origin.x + carImageView.frame.size.width / 2
        let maxPosition = roadImageView.frame.maxX - carImageView.frame.size.width / 2
        var carCenterX = max(fingerPosition.x, minPosition)
        carCenterX = min(carCenterX, maxPosition)
        carImageView.center = CGPoint(x: carCenterX, y: fingerPosition.y)
    }
    

    【讨论】: