팬 제스처로 이동 한 후 UIStackView의 요소를 가져 오거나 유지하려고합니다.UIStackView & Gestures
예를 들어, 핸들을 잡으려고하는 요소는 버튼 태그 또는 텍스트 레이블 텍스트와 같은 것입니다. 그것은 버튼 및 텍스트 레이블을 포함하는 기능 func createButtonStack(label: String, btnTag: Int) -> UIStackView
를 통해
코드 설명 ...
나는 UIStackView을 만드는 오전.
버튼 스택을 만들면 팬 제스처를 첨부하여 화면 주위로 버튼을 이동할 수 있습니다. 다음 3 가지가 작동합니다.
- 가 나는 버튼을 누르면 내 메시지를 인쇄하는 재미를 호출 할 수 있습니다
- 만든 버튼 스택을 얻을.
- 버튼 스택을 이동할 수 있습니다.
I가 가지고있는 문제 ...
나는 버튼을 처음으로하고 버튼 스택의 문 gesture.type == .ended
라인이 트리거되는 경우, 잃을 제어 스택으로 이동하면.
즉, 버튼이 더 이상 작동하지 않으며 더 이상 움직일 수 없습니다.
아무도 도와 줄 수 있습니까? buttonStack에 감사
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. 통찰력을 가져 주셔서 감사합니다. 그것은 내 버튼 하나가 행동해야한다는 사실에 대해 생각할 무언가를주었습니다. 내 실제 프로젝트에는 동일한 방식으로 동작해야하는 여러 개의 버튼이 있지만 이동 한 후에는 그렇지 않습니다. 내 코드의 다른 부분을 더 자세히 살펴보고 왜 하나의 버튼이 작동하는지 알아 보도록하겠습니다. 그러나 여러 개의 버튼은 아닙니다. 감사합니다 – K1llarney