【发布时间】:2018-08-17 13:49:53
【问题描述】:
当点击四个按钮中的任何一个时,指示器总是第一次动画到最左边的按钮下方的位置。但我想看到的是,指示器会滑到刚刚被点击的按钮正下方的位置。这四个按钮在情节提要中被标记为 0、1、2、3。为什么?提前谢谢!
class MainViewController: UIViewController {
@IBOutlet weak var weatherBtn: UIButton!
@IBOutlet weak var tourismBtn: UIButton!
@IBOutlet weak var tectonicsBtn: UIButton!
@IBOutlet weak var foodBtn: UIButton!
@IBOutlet weak var indicator: UIImageView!
var btnsArray: [UIButton]!
let tin = UIColor(red: 145/255, green: 145/255, blue: 145/255, alpha: 1)
override func viewDidLoad() {
super.viewDidLoad()
btnsArray = [weatherBtn, tourismBtn, tectonicsBtn, foodBtn]
indicator.image = UIImage().solidColor(.black, size: indicator.frame.size)
}
@IBAction func topicBtnTapped(_ sender: UIButton) {
indicate(button: sender)
}
func indicate(button: UIButton) {
UIView.animate(withDuration: 0.3) {
self.indicator.center.x = (button.superview?.frame.minX)! + button.frame.width * 0.5 * (2 * CGFloat(button.tag) + 1)
}
for btn in btnsArray {
btn.titleLabel?.textColor = tin
}
button.setTitleColor(.black, for: .normal)
}
}
extension UIImage {
func solidColor(_ color: UIColor, size: CGSize) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
}
【问题讨论】:
-
如果你使用这个更好 -> cocoacontrols.com/controls/shviewpagerexample
-
@dahiya_boy 谢谢!但我正在尝试实现我现在拥有的代码。没有可可豆荚。 :)
-
在情节提要中布局时是否使用了约束?如果是这样,您应该为约束创建
IBOutlets 并更改.constant值。将约束与显式帧值混合会产生问题。 -
@DonMag 确实如此。我现在已经解决了这个问题。谢谢!