私は、パンジェスチャーでそれを移動した後、私のUIStackViewの要素を取得/維持しようとしています。UIStackView&Gestures
たとえば、ハンドルを取得しようとしている要素は、ボタンタグやテキストラベルのテキストのようなものです。
コードを説明...
を、私はそれは、ボタンやテキスト・ラベルが含まれている機能func createButtonStack(label: String, btnTag: Int) -> UIStackView
を経由して、UIStackViewを作成しています。
ボタンスタックが作成されると、画面にボタンを移動できるようにパンジェスチャーが追加されます。以下の3つの点が働きます。
- 私はボタンを押すと、私のメッセージを印刷する楽しさを呼び出すことができます
- を作成したボタンスタックを取得します。
- ボタンスタックを移動できます。
私はボタンが初めてスタックと声明gesture.type == .ended
ラインがトリガされた場合、私はボタンスタックのコントロールを失う移動したら、私が持っている問題は...
です。
つまり、ボタンは機能しなくなりました。これ以上移動することはできません。
誰でもお手伝いできますか?おかげ
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .lightGray
let ButtonStack = createButtonStack(label: “Button One”, btnTag: 1)
view.addSubview(ButtonStack)
ButtonStack.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
ButtonStack.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
let panGuesture = UIPanGestureRecognizer(target: self, action: #selector(pan(guesture:)))
ButtonStack.isUserInteractionEnabled = true
ButtonStack.addGestureRecognizer(panGuesture)
}
func createButtonStack(label: String, btnTag: Int) -> UIStackView {
let button = UIButton()
button.setImage(imageLiteral(resourceName: "star-in-circle"), for: .normal)
button.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
button.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
button.contentMode = .scaleAspectFit
button.tag = btnTag
switch btnTag {
case 1:
button.addTarget(self, action: #selector(printMessage), for: .touchUpInside)
case 2:
break
default:
break
}
//Text Label
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.green
textLabel.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
textLabel.heightAnchor.constraint(equalToConstant: 25.0).isActive = true
textLabel.font = textLabel.font.withSize(15)
textLabel.text = label
textLabel.textAlignment = .center
//Stack View
let buttonStack = UIStackView()
buttonStack.axis = UILayoutConstraintAxis.vertical
buttonStack.distribution = UIStackViewDistribution.equalSpacing
buttonStack.alignment = UIStackViewAlignment.center
buttonStack.spacing = 1.0
buttonStack.addArrangedSubview(button)
buttonStack.addArrangedSubview(textLabel)
buttonStack.translatesAutoresizingMaskIntoConstraints = false
return buttonStack
}
@objc func printMessage() {
print(“Button One was pressed”)
}
@objc func pan(guesture: UIPanGestureRecognizer) {
let translation = guesture.translation(in: self.view)
if let guestureView = guesture.view {
guestureView.center = CGPoint(x: guestureView.center.x + translation.x, y: guestureView.center.y + translation.y)
if guesture.state == .ended {
print("Guesture Center - Ended = \(guestureView.center)")
}
}
guesture.setTranslation(CGPoint.zero, in: self.view)
}
私はあなたが投稿した同じコードを実行しました。そして、それは完璧に動作しています。スタックビューを別の位置に移動しても、問題なくボタンをタップできます。 – PGDev
@PGDev。あなたの洞察に感謝します。それは私の1つのボタンが必要なときに行動しているという事実を考えることを私に与えてくれました。私の実際のプロジェクトには、同じ方法で動作するはずの複数のボタンがありますが、移動した後は操作しないでください。私はコードの残りの部分を詳しく見て、なぜボタンが1つしか動作しないのかを調べるつもりですが、複数のボタンではありません。おかげで – K1llarney