如何在 UIScrollView 中的图像上呈现非缩放覆盖

Posted

技术标签:

【中文标题】如何在 UIScrollView 中的图像上呈现非缩放覆盖【英文标题】:How to render non-zoomed overlay over image in UIScrollView 【发布时间】:2016-01-18 14:46:53 【问题描述】:

我的计划是在UIScrollView 中呈现自定义波形(以允许用户平移和滚动波形)。但另外我想在波形顶部呈现额外的非缩放信息(如播放位置标记、时间......)

所以我有一个静态的UIImage,它是预渲染的波形,还有一些我必须在它上面动态渲染的小位(我不希望位置标记或文本在波形上放大)。

我读到UIImageView 是渲染简单图像的最有效方法 (Most efficient way to draw part of an image in ios),但这对我来说还不够,因为我必须在它上面渲染一些东西。或者这有可能吗?

我暂时看不到使用UIScrollView 的方法,因为它会放大里面的所有内容,对吗?但如前所述,我只需要缩放图像,而不需要缩放附加数据。

我可以使用UIScrollView 来实现吗?还是我必须实现一个自定义视图来自行处理缩放和平移?

【问题讨论】:

UIScrollView 上覆盖UIView 有什么问题? 您的意思是在顶部的UIView 上渲染内容并在其中手动实现平移和缩放?而UIScrollView 将负责UIImage 的缩放和平移?这看起来会很紧还是在缩放和平移时会出现故障? 不,我的意思是将您的UIImageView 添加到您的UIScrollView,然后将UIView 覆盖在滚动视图上。您不需要在UIView 中进行缩放或平移,正如您所说的“附加数据未缩放。”如果您需要在UIView 中平移,请使用两个UIScrollViews on彼此顶部(禁用缩放)....或亚历山大的解决方案(我不知道该功能存在) 啊,好吧。而且,滚动视图不会缩放附加数据(为了避免播放标记的宽度发生变化)。但我需要缩放和平移信息才能在正确的位置渲染播放位置标记 啊对...好吧,您始终可以在滚动视图和叠加层之间设置一个委托,以便在缩放或平移更改时对其进行更新。 【参考方案1】:

如果我理解正确,您需要缩放一个视图(UIImageView)并防止缩放另一个视图(例如 UILabel)。所以,你错了 Scroll View 缩放里面的所有东西。 UIScrollViewDelegate 有方法

optional func viewForZoomingInScrollView(_ scrollView: UIScrollView) -> UIView?

它应该返回应该缩放的视图。希望,我帮助了你。

【讨论】:

但这会阻止其他子视图的自动“平移”吗?

以上是关于如何在 UIScrollView 中的图像上呈现非缩放覆盖的主要内容,如果未能解决你的问题,请参考以下文章

如何区分 UIScrollView 中的平移和滚动

使 UIScrollView 中的顶部图像在滚动视图边界上放大?

如何在 iOS 上的 UIScrollView 中正确替换 UIImageView 中的图像

如何在 Swift 的 UIScrollView 中的视图之间添加填充? [关闭]

UIscrollView 水平滚动图像并显示单击图像中的图像

如何在 UIScrollView 中旋转图像?