Каталог активов 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,

Супер простое решение, которое очень хорошо сработало для меня:

  1. Никогда не устанавливайте UIImageViewimage Свойство в Интерфейсном Разработчике, просто оставьте это пустым.
  2. Установить 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 как класс в Интерфейсном Разработчике)

Другие вопросы по тегам