Событие .valueChanged в iOS 26 UISlider всегда пустое, а allTouches всегда равно нулю, поэтому невозможно определить конIOS

Программируем под IOS
Ответить
Anonymous
 Событие .valueChanged в iOS 26 UISlider всегда пустое, а allTouches всегда равно нулю, поэтому невозможно определить кон

Сообщение Anonymous »

У меня есть старое приложение, которое работало нормально до выхода iOS 26. В своем приложении я использую событие .valueChanged UISlider, чтобы получить фазу и выполнять разные действия, если это .began, .moved или .ended.
Это распространенное решение: как определить конец перетаскивания UISlider?
Ниже приведен мой простой пример:

Код: Выделить всё

import UIKit
import SnapKit

class ViewController: UIViewController {

let label = UILabel()
let slider = UISlider()

override func viewDidLoad() {
super.viewDidLoad()

let stackView = UIStackView(arrangedSubviews: [label, slider])
stackView.axis = .vertical
stackView.spacing = 20
view.addSubview(stackView)

stackView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.horizontalEdges.equalToSuperview().inset(30)
}

label.textAlignment = .center

slider.isContinuous = true
slider.minimumValue = 0
slider.maximumValue = 100
slider.addTarget(self, action: #selector(sliderValueChanged(sender:event:)), for: .valueChanged)

}

@objc func sliderValueChanged(sender: UISlider, event: UIEvent) {
print("Slider: \(slider.value), \(event)")
label.text = "Value: \(sender.value)"

switch event.allTouches?.first?.phase {
case .began:
print("began")
case .moved:
print("moved")
case .ended:
print("ended")
case .cancelled:
print("cancelled")
default:
break
}
}

}
Раньше все работало нормально. Но в iOS 26 событие, передаваемое моей функции слайдераValueChanged, является странным. Это не ноль, но это тоже не совсем событие. Например, оператор print просто печатает пустой текст события. И установка оператора прерывания в этот момент показывает это, как показано ниже:
Изображение

Поэтому в iOS 26 event.allTouches всегда равен нулю. Поэтому я не могу понять, на какой стадии события это происходит.
Это ошибка? Как это обойти?
Я обнаружил, что если я переключусь с .valueChanged на .allEvents, то получу событие для фазы начала и перемещения. Однако я не получаю завершенную или отмененную фазу.
Как я могу получить и эти фазы?
РЕДАКТИРОВАТЬ:
Похоже, это может быть ошибка:
https://developer.apple.com/forums/thre ... login=true

Подробнее здесь: https://stackoverflow.com/questions/797 ... s-always-n
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»