У меня есть UIImageView, чье взаимодействие с пользователем является истинным и которому я дал распознаватель жестов касания, чей обработчик действий выглядит следующим образом:
@IBAction func tap(_ sender:UITapGestureRecognizer) {
let iv = sender.view as! UIImageView
let im = iv.image!
let im2 = UIGraphicsImageRenderer(size:im.size).image { _ in
UIColor.red.setFill()
UIBezierPath(rect: CGRect(origin:.zero, size:im.size)).fill()
}
iv.image = im2
}
Я ожидаю, что отображаемое изображение при касании изображениявид, подлежащий замене сплошным красным изображением.Это отлично работает на моей машине High Sierra под Xcode 9.4.Но на моем Sierra MacBook под Xcode 9.2 ничего не происходит.
Это странно.Сделав паузу в отладчике, я вижу, что новое изображение создается правильно:
![enter image description here](https://i.stack.imgur.com/Z8oSo.png)
Изображение заменяется , но представление изображения не перерисовывается.Добавление вызовов типа setNeedsDisplay
ничего не делает.
Более того, если я затем продолжу заменять изображение представления изображения на другое изображение, я вижу красное изображение!
iv.image = im2
delay(0.5) {
iv.image = im // causes im2 to appear!
}
Некоторое закулисное кэширование, очевидно, заставляет представление изображения отставать в отображении на одно изображение.
Может кто-нибудь пролить свет на это?Это, вероятно, ошибка в самой iOS, и, возможно, в 9.2 конкретно;как можно обойти это?(Очевидно, что можно заменить другой просмотр изображений оптом, но это не скажет нам, что происходит с кэшированием.)