Multipeer: возможно ли иметь независимые UIScrollViews?

У меня есть приложение 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()
  }

person UrsaTeddy    schedule 05.11.2018    source источник


Ответы (1)


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

ViewWillLayoutSubviews контроллера представления не срабатывает на узле после запуска приложения и получения изображений от узла.

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

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

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

person UrsaTeddy    schedule 06.11.2018