#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, другие представления перейдут наверх или в другое место (конечно, зависит от ваших ограничений).