用高分辨率

时间:2018-04-24 18:11:13

标签: ios swift xcode uiscrollview

我有一个用户可以放大的UIScrollview。图像非常大(3MBs +)所以我先下载一个低分辨率版本,然后在下载完成后加载大版本。

它是无缝的,除非用户已放大。

在用高分辨率图像替换低分辨率图像时,如何保持精确缩放?我基本上只是希望用户看到图像更清晰,但不能改变他们正在看的内容。

指导的一些示例尺寸:

  • 低分辨率图像:(222,200)默认放大水平(双击时):4.55 ...
  • 高分辨率图像:(1184,1067),默认放大级别:0.854 ...
  • UIScrollview本身基本上是全屏的AspectFit(414.0,672.0)

这是我正在做类似事情的代码示例。用户还可以调整图像的亮度。在这种情况下,我正在交换具有完全相同尺寸的图像,以便此代码可以工作,但如果尺寸发生变化则不行。

// Get the frame & zoom scale of image before replacing it
let tempZoomScale = pageImageViews[pageToUse].zoomScale
let tempFrame = pageImageViews[pageToUse].contentOffset

// Replace the image with the newly formatted one
pageImageViews[pageToUse].display(image: imageToUse)

// Set the same zoom position as it was before we swapped the image
if (maintainZoomPosition == true) {
    pageImageViews[pageToUse].zoomScale = tempZoomScale
    pageImageViews[pageToUse].contentOffset = tempFrame
}

任何建议都非常感谢!

由于

3 个答案:

答案 0 :(得分:2)

  

在用高分辨率图像替换低分辨率图像时,如何保持精确变焦?

只需这样做 - 用高分辨率图像替换低分辨率图像。但是不要替换包含图像的图像 view ;这似乎是你的错误。这样做无异于干扰滚动视图的整个缩放机制,这就是造成问题的原因。

答案 1 :(得分:1)

如果您将图像放在UIImageView内,其内容模式设置为.scaleAspectFit,并且该图像视图具有设置的大小,则用更高分辨率的图像替换图像不应该更改缩放水平。

答案 2 :(得分:0)

从表现的角度来看,你想做的工作并不好。 更好的方法是在下载大图像之前显示一些进度视图,然后替换图像并删除进度视图。