Multipeer: возможно ли иметь независимые UIScrollViews? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть приложение Multipeer (только одно приложение), которое позволяет хосту представлять изображение и затем рисовать на нем.

Пиры получают изображение по мере его изменения.

Изображение представлено в UIScrollView в обоих типах режимов.

Хост может в настоящее время панорамировать изображение и увеличивать и уменьшать масштаб.

Однако хост хотел бы иметь возможность сделать то же самое, возможно, для просмотра части изображения большего размера, чем редактируется.

Это вообще возможно? Прямо сейчас оба режима используют один и тот же код, кроме случаев, когда настраивается режим просмотра изображений с прокруткой. Хост загружает изображение со своего собственного устройства, в то время как одноранговый узел копирует изображение из данных, отправленных через соединение Multipeer.

Любые идеи будут оценены.

Дома, чтобы я мог добавить код.

Различные функции, связанные с UIScrollView. imageView - это пользовательский UIImageView, имеющий несколько свойств, одним из которых является mapSizeRatio, которое соотносит соотношение исходного изображения с плотностью экрана для работы с поворотом и различными устройствами.

  func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
  }

  func scrollViewDidZoom(_ scrollView: UIScrollView) {
    let imageViewSize = imageView.frame.size
    let scrollViewSize = bounds.size

    let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
    let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0

    contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
  }

  /// maximum zoom should be based on the 1-inch square concept
  public func setZoomScaleForScrollView() {
    let imageViewSize = imageView.bounds.size
    let scrollViewSize = bounds.size
    let widthScale = scrollViewSize.width / imageViewSize.width
    let heightScale = scrollViewSize.height / imageViewSize.height

    minimumZoomScale = max(widthScale, heightScale)
    maximumZoomScale = imageView.mapSizeRatio
  }

и в контроллере вида

  override func viewWillLayoutSubviews() {
    mapScrollView.setZoomScaleForScrollView()
  }

1 Ответ

0 голосов
/ 06 ноября 2018

После ночного отдыха и отладки ВСЕГО в моем приложении я обнаружил что-то «странное?».

viewWillLayoutSubviews View Controller не запускается на одноранговом узле после запуска приложения и получения изображений с хоста.

Так что это был простой случай выполнения view.setNeedsLayout (), когда узел получает обновление изображения.

Однако это было не так интуитивно для меня ... если imageView изменяется, разве scrollView не должен сказать "эй", что-то изменилось ... и, таким образом, вызвать viewController, чтобы подумать "эй, мне нужно обновить"?

В любом случае, я надеюсь, что это поможет другим, которые думают сделать что-то подобное.

...