Каталог активов Xcode 9 Сохраняет векторные данные не работает?
Я думал, что новая галочка "Сохраняет векторные данные" в каталоге ресурсов Xcode 9, наконец, даст нам изменение размера векторных изображений PDF, но, очевидно, нет. Вот мое тестовое изображение, замеченное в двух увеличениях в Preview:
Хороший и четкий, с большим увеличением, так что ясно, что это векторное изображение. Но вот как выглядят два изображения в моем приложении:
Так где мои векторные данные? Эта столь желанная особенность все еще отсутствует в действии? Это все еще работает только для автоматически сгенерированных 2x и 3x изображений? И если да, то что дает нам флажок "Сохранить векторные данные", которого у нас еще не было?
3 ответа
Это работает, но только если вы выполняете изменение размера самостоятельно:
Это было достигнуто в коде, например так:
let im = UIImage(named:"Image")!
let r = UIGraphicsImageRenderer(size:self.iv2.bounds.size)
let im2 = r.image {
_ in
im.draw(in: self.iv2.bounds)
}
self.iv2.image = im2
self.iv2.contentMode = .center
Таким образом, UIImageView будет растеризоваться по мере масштабирования (например, для Aspect Fit), но рисование в коде сохранит векторные данные.
РЕДАКТИРОВАТЬ Новое в Xcode 9 beta 5, теперь оно работает как положено! На этом снимке экрана второй вид изображения просто масштабируется, не более. Мы резко изменили размер!
Изменить: все тот же глючное поведение в Xcode 9 GM (9A235)
На сегодняшний день (Xcode 9 beta 6 9M214v) изображение будет отображаться правильно (не размыто), если UIImageView имеет как минимум 3 ограничения, связанные с расстоянием.
например. расстояние слева, расстояние справа, расстояние сверху и другое ограничение для определения высоты UIImageView.
Также обратите внимание, что полное отключение autolayout приведет к неправильной визуализации всего UIImageView.
Я заполнил rdar: // 34279759 ( http://www.openradar.me/radar?id=5005434293321728) для этой ошибки.
У меня была одна и та же проблема несколько раз с новым Preserves Vector Data
,
Супер простое решение, которое очень хорошо сработало для меня:
- Никогда не устанавливайте
UIImageView
image
Свойство в Интерфейсном Разработчике, просто оставьте это пустым. - Установить
image
значение программно.
Надеюсь, поможет.
В моем случае (Xcode 9.4.1), с imageView
созданный в Интерфейсном Разработчике - я заметил, что, когда я первоначально прибываю на экран, изображение размыто. Если я затем изменю ориентацию устройства, изображение становится четким. Я пытался вызвать разные методы вручную в viewDidLoad()
и вот что я нашел до сих пор:
Это сработало:
let image = imageView.image
imageView.image = nil
imageView.image = image
Ни один из них не работал:
imageView.layoutSubviews()
imageView.layoutMarginsDidChange()
imageView.setNeedsLayout()
imageView.setNeedsDisplay()
imageView.reloadInputViews()
imageView.updateConstraints()
imageView.contentMode = .center ; imageView.contentMode = .scaleToFill
Вы должны, конечно, расширить или подкласс UIImageView
если вы будете часто звонить, например, вот так
class UIImageViewWithPreserveVectorDataFix: UIImageView {
override func awakeFromNib() {
super.awakeFromNib()
let image = self.image
self.image = nil
self.image = image
}
}
(а потом конечно поставил UIImageViewWithPreserveVectorDataFix
как класс в Интерфейсном Разработчике)