Swift: setNeedsDisplay () возвращает UIView обратно к исходным ограничениям - PullRequest
0 голосов
/ 20 февраля 2019

Я строил 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()
                }
            }
        }`

Расширенное состояние

Expanded State

Свернутое состояние

Collapsed State

Скрытое состояние

Hidden State

Ошибка после вызова функции графика обновления

Bug after update graph function is called

...