Перемещение представления внутри контроллера представления

#swift #xcode

#swift #xcode

Вопрос:

У меня есть контроллер представления и представления стека, настроенные следующим образом. Внутри представления стека у меня есть кнопки. введите описание изображения здесь

У меня есть 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 она не работает.

Комментарии:

1. Может быть, что-то вроде этого может помочь hackingwithswift.com/example-code/uikit / … Кстати, нет необходимости добавлять -> Void при объявлении ваших функций, что они по умолчанию возвращают Void.

Ответ №1:

попробуйте это p1.ButtonA.isHidden = true

Если вы сделаете видимость содержимого false в stackviews, другие представления перейдут наверх или в другое место (конечно, зависит от ваших ограничений).