首页 > 解决方案 > 在视图控制器内移动视图

问题描述

我有一个视图控制器和堆栈视图设置如下。在堆栈视图中,我有按钮。 在此处输入图像描述

Player在视图控制器中有一个类,其中有一个移动卡片的功能。我需要我busViewButton继续前进,BtnP1A我试图实现它如下:

class GameViewController: UIViewController, Alertable {
    @IBOutlet weak var btnP1A: UIButton!
    @IBOutlet weak var btnP1B: UIButton!
    var p1 = Player(n:"P1")
    
    func start() -> Void{
        p1.buttonA = btnP1A
        p1.buttonB = btnP1B
        p1.vc = self
    }
.....

    
    public class Player: Alertable{
        var buttonA:UIButton!
        var buttonB:UIButton!
        weak var vc: GameViewController! = nil

.....
        func move() -> Void{
            var busFrame = self.vc.busViewButton.frame
            
            //self.buttonA is BtnP1A
            let frameA = self.buttonA.superview?.convert(self.buttonA.frame.origin, to: nil)
            
            busFrame.origin.y = frameA!.y
            busFrame.origin.x = frameA!.x
            
            self.vc.busViewButton.frame = busFrame
        }
.....
    }
}

但这并不能正确更新位置,新位置与 的位置不同BtnP1A。我没有正确获得相对位置吗?

更新:

它与从嵌套类中调用有关。因为,当从 View Controller 类调用类似的动画时,它可以工作,但是当在 Player 类中移动时,它就不起作用了。

标签: swiftxcode

解决方案


试试这个 p1.buttonA.isHidden = true

如果您在堆栈视图中使内容的可见性为假,则其他视图将转到顶部或其他位置(当然取决于您的约束)。


推荐阅读