如何在 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
中平移,请使用两个UIScrollView
s on彼此顶部(禁用缩放)....或亚历山大的解决方案(我不知道该功能存在)
啊,好吧。而且,滚动视图不会缩放附加数据(为了避免播放标记的宽度发生变化)。但我需要缩放和平移信息才能在正确的位置渲染播放位置标记
啊对...好吧,您始终可以在滚动视图和叠加层之间设置一个委托,以便在缩放或平移更改时对其进行更新。
【参考方案1】:
如果我理解正确,您需要缩放一个视图(UIImageView)并防止缩放另一个视图(例如 UILabel)。所以,你错了 Scroll View 缩放里面的所有东西。 UIScrollViewDelegate 有方法
optional func viewForZoomingInScrollView(_ scrollView: UIScrollView) -> UIView?
它应该返回应该缩放的视图。希望,我帮助了你。
【讨论】:
但这会阻止其他子视图的自动“平移”吗?以上是关于如何在 UIScrollView 中的图像上呈现非缩放覆盖的主要内容,如果未能解决你的问题,请参考以下文章
使 UIScrollView 中的顶部图像在滚动视图边界上放大?
如何在 iOS 上的 UIScrollView 中正确替换 UIImageView 中的图像
如何在 Swift 的 UIScrollView 中的视图之间添加填充? [关闭]