События вызывают функцию #selector в нескольких местах и нуждаются в разных значениях параметров. Одним из параметров, которые я здесь использую, является значение по умолчанию (Bool). Но когда вызывается функция setBar, значение по умолчанию всегда ложно.
Что я делаю не так?
// the to be called function, done by a target action event from a segmentedControl.changeEvent or by a DispatchQueue delay or during a viewDidAppear.
@objc func setBar(segmentedControl: UISegmentedControl, animated: Bool = true) {
func adjustBar() {
self.bar!.frame.origin.x = (self.segmentedControl!.frame.width / CGFloat(self.segmentedControl!.numberOfSegments)) * CGFloat(self.segmentedControl!.selectedSegmentIndex)
}
if animated == true {
UIView.animate(withDuration: 0.2) {
adjustBar()
} }
else {
adjustBar()
}
}
// the code that set the target & action for the segmentedControl
segmentedControl!.addTarget(self, action: #selector(setBar), for:UIControl.Event.valueChanged)
// code called when setting the index by code
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
self.setBar(segmentedControl: self.segmentedControl!, animated: false)
}
Все работает, кроме значения по умолчанию. Любые предложения, чтобы это исправить?
Спасибо вам за ответ.
Но если я использую true, как;
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
self.setBar(segmentedControl: self.segmentedControl!, animated: true)
}
тогда это работает. Так что читая упомянутую статью, подпись работает
Или, если я что-то изменю / переверну, скажу неправильно, это сработает.
@objc func setBar(segmentedControl: UISegmentedControl, notAnimated : Bool = false) {
func adjustBar() {
self.bar!.frame.origin.x = (self.segmentedControl!.frame.width / CGFloat(self.segmentedControl!.numberOfSegments)) * CGFloat(self.segmentedControl!.selectedSegmentIndex)
}
print("notAnimated = \(notAnimated)")
if notAnimated == false {
UIView.animate(withDuration: 0.2) {
adjustBar()
} }
else {
adjustBar()
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
self.setBar(segmentedControl: self.segmentedControl!, notAnimated: true)
}