Multipeer:是否可以拥有独立的UIScrollViews?

时间:2018-11-05 04:20:43

标签: uiscrollview swift4 multipeer-connectivity

我有一个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
  }

以及在View Controller中

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

1 个答案:

答案 0 :(得分:0)

经过一夜的休息,然后调试应用程序中的所有内容,我发现了一些“奇怪的东西?”。

应用运行并从主机接收图像后,View Controller的viewWillLayoutSubviews不会在Peer上触发。

因此,这是当Peer收到图像更新时执行view.setNeedsLayout()的简单情况。

但是,这对我来说不是那么直观...如果imageView更改了,scrollView是否应该说“嘿”某些事情已更改...从而触发viewController认为“嘿我需要更新”? / p>

无论如何,我希望这对那些正在考虑做类似事情的人有所帮助。