【问题标题】:Drawing an image in a UIScrollView in a zoom-invariant way以缩放不变的方式在 UIScrollView 中绘制图像
【发布时间】:2012-02-09 17:15:33
【问题描述】:

我有一个UIScrollView,它显示一个UIView,它本身包含一个小的视图层次结构。其中一个子视图用于绘制图标(它们的逻辑含义是 PDF 页面上的便签标记)。目前,图标与所有其他内容一起缩放。但是,无论当前缩放如何,我都想以相同的大小绘制它们(当然,它们的正确位置仍然必须保持)。最好的方法是什么?

【问题讨论】:

  • 你试过在 UIView 上使用autoresizingMask 吗?它的默认值为 UIViewAutoresizingNone
  • 我没有,但这不是一个简单的解决方案。充其量我必须计算在该恒定大小视图中显示 PDF 页面的哪个部分,并相应地过滤图标。这是很多工作,所以我希望有一个更简单的解决方案:-)
  • 我的复杂解决方案是通知图标视图任何缩放变化,并让它们相应地重绘+重新定位。

标签: ios uiscrollview


【解决方案1】:

您基本上必须单独设置子视图的变换比例以匹配滚动视图的缩放因子。因此,每当您滚动时,循环浏览子视图,如果滚动视图缩放因子是 5.0,您可以像这样设置转换:

CGFloat scaleFactor = 1.0/5.0; // 1.0 divided by the scrollview zoom factor
subview.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);

从好的方面来说,它会正确居中,所以您所要做的就是设置变换,其他一切都应该正常工作(您不必操纵框架)。

【讨论】:

  • 不幸的是,它不起作用 - 因为它应用了相对于视图中心的变换,而不是相对于每个图标的中心。所以它实际上在缩放过程中相对于文本移动了图标。
  • 我很确定它会应用相对于它所应用的视图中心的缩放 - 你确定你将它应用到图标视图而不是容器视图吗?
  • 你是对的,但我将所有图标绘制在一个视图上,我不会为每个图标提供单独的视图。但是,我认为我也可以缩放图标的原点,这应该可以。现在就试试吧。
  • 我认为这不会起作用,因为如果您放大地图,即使它们保持相同大小,旗帜图标也需要进一步分开。如果您将它们全部绘制到一个视图中,我认为您别无选择,只能在缩放时重新绘制该视图。不过我认为性能不会很好。
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2014-05-14
  • 2015-03-28
相关资源
最近更新 更多