Я работаю над заданием на языке 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
Добавьте самую верхнюю метку в центр прялки в UIKit. ⇐ IOS
Программируем под IOS
-
Anonymous
1713515706
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..
Подробнее здесь: [url]https://stackoverflow.com/questions/78280200/add-top-most-label-to-the-center-of-spinning-wheel-in-uikit[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия