gpt4 book ai didi

ios - UISegmentedControl 的动画栏按钮没有移动?

转载 作者:行者123 更新时间:2023-11-28 13:48:06 27 4
gpt4 key购买 nike

我在 Swift 中设计了按钮栏 UISegmentedControl“showUsers”的动画,当我尝试实现动画时,该栏仍然保持第一个片段并且不移动到第二个片段示例 https://www.codementor.io/kevinfarst/designing-a-button-bar-style-uisegmentedcontrol-in-swift-cg6cf0dok

override public func viewDidLoad(){
super.viewDidLoad()

showUsers.backgroundColor = .clear
showUsers.tintColor = .clear

showUsers.setTitleTextAttributes([
NSAttributedString.Key.font : UIFont(name: "DINCondensed-Bold", size: 18),
NSAttributedString.Key.foregroundColor: UIColor(red:0.44, green:0.44, blue:0.44, alpha:1.0)
], for: .normal)

showUsers.setTitleTextAttributes([
NSAttributedString.Key.font : UIFont(name: "DINCondensed-Bold", size: 18),
NSAttributedString.Key.foregroundColor: UIColor(red:0.44, green:0.44, blue:0.44, alpha:1.0)
], for: .selected)

let buttonBar = UIView()
// This needs to be false since we are using auto layout constraints
buttonBar.translatesAutoresizingMaskIntoConstraints = false
buttonBar.backgroundColor = UIColor(red:0.44, green:0.44, blue:0.44, alpha:1.0)

view.addSubview(showUsers)
view.addSubview(buttonBar)

// Constrain the top of the button bar to the bottom of the segmented control
buttonBar.topAnchor.constraint(equalTo: showUsers.bottomAnchor).isActive = true
buttonBar.heightAnchor.constraint(equalToConstant: 5).isActive = true
// Constrain the button bar to the left side of the segmented control
buttonBar.leftAnchor.constraint(equalTo: showUsers.leftAnchor).isActive = true
// Constrain the button bar to the width of the segmented control divided by the number of segments
buttonBar.widthAnchor.constraint(equalTo: showUsers.widthAnchor, multiplier: 1 / CGFloat(showUsers.numberOfSegments)).isActive = true

showUsers.addTarget(self, action: #selector(HomeViewController.segmentedControlValueChanged(_:)), for: UIControl.Event.valueChanged)
}


@objc func segmentedControlValueChanged(_ sender: UISegmentedControl) {
UIView.animate(withDuration: 0.3) {
print(self.showUsers.frame.width) //147.0
print(self.showUsers.numberOfSegments) //2
print(self.showUsers.selectedSegmentIndex)//1

//let originX = (self.showUsers.frame.width / CGFloat(self.showUsers.numberOfSegments)) * CGFloat(self.showUsers.selectedSegmentIndex + 1)

let originX = (self.showUsers.frame.width / CGFloat(self.showUsers.numberOfSegments)) * CGFloat(self.showUsers.selectedSegmentIndex + 1)
self.buttonBar.frame.origin.x = originX
}
}

更新:更新计算函数,它移动了线,但不是我想要的 enter image description here the bar x postion after click

最佳答案

您的问题是您正在对具有约束的 View 应用“框架”更改,因此请尝试在方法 segmentedControlValueChanged 中使用约束而不是此

let originX = (self.showUsers.frame.width / CGFloat(self.showUsers.numberOfSegments)) * CGFloat(self.showUsers.selectedSegmentIndex + 1)
self.buttonBar.frame.origin.x = originX

关于ios - UISegmentedControl 的动画栏按钮没有移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com