Я строил UICollectionViewController
, в котором три подпредставления.Эти подпредставления являются пользовательскими UIViews, которые содержат UITestViews и / или пользовательский график.Подвиды анимированы, и анимации соответствуют трем возможным состояниям: развернуто, свернуто, скрыто.Жесты панорамирования и касания используются для переключения между состояниями.
Когда состояние установлено как свернутое, подробный вид (черный) перемещается вверх, так что только часть этого вида видна пользователю.График на графике (зеленый / красный) будет виден пользователю.Это графическое представление также имеет коллекционное представление, которое содержит несколько ячеек.Если коснуться определенной ячейки, представление коллекции вызовет функцию (включена), чтобы перерисовать график с правильными точками и изменить цвет фона.setNeedsDisplay()
используется для перерисовки графика.Когда вызывается эта функция, все представления мгновенно возвращаются туда, где были установлены их начальные авто-ограничения.
Я обнаружил, что когда это происходит, состояние не обновляется, пока вы снова не коснетесь экрана.Я определил, что эта ошибка не вызвана функцией setNeedsDisplay()
, но, вероятно, вызвана, когда я ссылаюсь на UICollectionViewController (detailViewController)
в функции, которая перерисовывает график и обновляет цвета представления графика.
Любая помощь по исправлениюэта ошибка очень ценится.Снимки экрана и код для функции обновления графика включены ниже.
`func changeTimeFrameDisplayed(range: Int) {
for i in 0..<detailViewController!.stock.price.count {
if timeInterval[range] ==detailViewController!.stock.price[i].timeInternal! {
if detailViewController!.stock.price[i].closePrice.isEmpty == false {
graphView.data = (detailViewController!.stock.price[i].closePrice)
if detailViewController!.stock.stats!.currentPrice! > detailViewController!.stock.price[i].closePrice.first! {
self.backgroundColor = appGreen
detailViewController!.tradeView.backgroundColor = appGreen
amountChangeLabel.text = "$" + String(format: "%.2f", detailViewController!.stock.stats!.currentPrice! - detailViewController!.stock.price[i].closePrice.first!)
percentageChangeLabel.text = String(format: "%.2f", (detailViewController!.stock.stats!.currentPrice! - detailViewController!.stock.price[i].closePrice.first!) / detailViewController!.stock.price[i].closePrice.first! * 100.0) + "%"
if isUpsideDown {
changeButton.transform = changeButton.transform.rotated(by: .pi)
isUpsideDown = false
}
} else {
self.backgroundColor = appRed
detailViewController!.tradeView.backgroundColor = appRed
percentageChangeLabel.text = String(format: "%.2f", (detailViewController!.stock.price[i].closePrice.first! - detailViewController!.stock.stats!.currentPrice!) / detailViewController!.stock.price[i].closePrice.first! * 100.0) + "%"
amountChangeLabel.text = "$" + String(format: "%.2f", detailViewController!.stock.price[i].closePrice.first! - detailViewController!.stock.stats!.currentPrice!)
if !isUpsideDown {
changeButton.transform = changeButton.transform.rotated(by: .pi)
isUpsideDown = true
}
}
graphView.setNeedsDisplay()
}
}
}`
Расширенное состояние
Свернутое состояние
Скрытое состояние
Ошибка после вызова функции графика обновления