我有一个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()
}
答案 0 :(得分:0)
经过一夜的休息,然后调试应用程序中的所有内容,我发现了一些“奇怪的东西?”。
应用运行并从主机接收图像后,View Controller的viewWillLayoutSubviews不会在Peer上触发。
因此,这是当Peer收到图像更新时执行view.setNeedsLayout()的简单情况。
但是,这对我来说不是那么直观...如果imageView更改了,scrollView是否应该说“嘿”某些事情已更改...从而触发viewController认为“嘿我需要更新”? / p>
无论如何,我希望这对那些正在考虑做类似事情的人有所帮助。