Добавьте самую верхнюю метку в центр прялки в UIKit.IOS

Программируем под IOS
Ответить
Anonymous
 Добавьте самую верхнюю метку в центр прялки в UIKit.

Сообщение Anonymous »

Я работаю над заданием на языке Swift. Я пытаюсь добиться функциональности, при которой у меня есть представление вращающегося колеса, и несколько меток добавляются в качестве элементов вокруг колеса. Я могу вращать вращающийся вид жестом смахивания в обоих направлениях: влево или вправо. Я могу реализовать всю функциональность.
Теперь проблема в том, что я хочу, чтобы самая верхняя метка находилась в центре стрелки вращающегося колеса. Другими словами, я хочу установить какой-либо конкретный индекс метки в центре вращающегося колеса. Функциональность работает нормально, если у меня четное количество элементов, например 2 или 4, но возникают проблемы, если количество элементов равно 3 или 5.
Код, который я использую для добавления стрелки в прялке:
var currentRotation: CGFloat = 0.0
var currentIndex = 0.0
var selectedIndex = 0.0

@IBOutlet weak var spinningView: UIView!

private func addLabelsToSpinningView() {
let labelCount = viewModel.homeDataModel?.data?.result?.count ?? 0
let angleInterval = CGFloat.pi * 2 / CGFloat(labelCount ) // Divide the circle equally among labels
let labelWidth: CGFloat = 120
let labelHeight: CGFloat = 100

let radiusFactor: CGFloat = 0.8 // Adjust this factor to bring labels closer or farther
for view in self.spinningView.subviews {
view.removeFromSuperview()
}

self.currentIndex = selectedIndex
self.lastIndex = (self.viewModel.homeDataModel?.data?.result?.count ?? 0) - 1
self.modeLabels.removeAll()
for labelIndex in 0.. 0 && self.selectedIndex 2 || self.selectedIndex == 1 {
self.currentRotation = (CGFloat.pi * 2)/labelArray * CGFloat(self.selectedIndex)
}else {
self.currentRotation = rotationAngle
}

debugPrint("rotationAngle on Add labels ------>>>> ", self.currentRotation)
self.spinningView.transform = CGAffineTransform(rotationAngle: self.currentRotation)
}

Я добавил код добавления жеста пролистывания к вращающемуся колесу. Кроме того, функция пролистывания работает в виде колеса. Это первый случай, когда мне нужно значение по умолчанию в качестве начального индекса колеса, и после вращения пользователя каждый выбранный индекс должен находиться в верхней центральной части колеса.
Другой случай: если верхняя выбранная функция не включена со стороны серверной части, колесо снова переместит последний выбранный элемент. Например, пользователь выбирает 4-й элемент, а последний выбранный элемент был 3. Но 4-й элемент не включен, поэтому теперь колесо будет вращаться до последнего выбранного элемента, который был 3. Если пользователь снова повернется в том же направлении, оно должно перейти к следующему элемент, который будет элементом 5.
Код для настройки прялки и добавления к нему жеста смахивания:
private func addWheelView() {
spinningView.layer.cornerRadius = spinningView.frame.size.height / 2
let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
swipeLeftGesture.direction = .left
swipeGestureview.addGestureRecognizer(swipeLeftGesture)
let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
swipeRightGesture.direction = .right
swipeGestureview.addGestureRecognizer(swipeRightGesture)
addLabelsToSpinningView()
}

Код для «Вращай колесо»:
@objc func handleSwipe(_ gesture: UISwipeGestureRecognizer) {
let labelArray: CGFloat = CGFloat(viewModel.homeDataModel?.data?.result?.count ?? 0)
let rotationAngle: CGFloat = gesture.direction == .left ? (-CGFloat.pi * 2)/labelArray : (CGFloat.pi * 2)/labelArray

currentRotation += rotationAngle debugPrint("rotationAngle", rotationAngle)

if gesture.direction == .left && currentIndex != lastIndex {
currentIndex += 1
}else if gesture.direction == .right && currentIndex != firstIndex {
currentIndex -= 1
}else if (gesture.direction == .left || gesture.direction == .right) && currentIndex == lastIndex {
currentIndex = firstIndex
}else if (gesture.direction == .left || gesture.direction == .right) && currentIndex == firstIndex {
currentIndex = lastIndex
}
print("SELECTED INDEX ----->>> \(viewModel.selectedIndex)")
print("Current INDEX ----->>> \(currentIndex)")

UIView.animate(withDuration: 0.5) {
self.spinningView.transform = CGAffineTransform(rotationAngle: self.currentRotation)
self.dashedImageView.transform = CGAffineTransform(rotationAngle: self.currentRotation)
self.updateMoodLabels(index: self.currentIndex)
}
}

func updateMoodLabels(index: Int) {
for i in 0..

Подробнее здесь: https://stackoverflow.com/questions/782 ... l-in-uikit
Ответить

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

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

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

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

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