UIScrollView 的问题

Posted

技术标签:

【中文标题】UIScrollView 的问题【英文标题】:Problem with UIScrollView 【发布时间】:2010-04-18 06:10:52 【问题描述】:

对不起,冗长的帖子。

我正在尝试理解 UIScrollView 并遇到了非常简单的问题。

    我正在创建滚动视图 我正在使这个视图比正常尺寸大 1.5 号 使用 UIScrollView 我希望看到视图的一些边缘元素超出范围,但应该能够平移视图,从而将缺失的元素带回可见区域。

但是我发现我不能只是平移/滚动视图,而是视图总是想向上滚动,只要我的手指从屏幕上移开(触摸结束事件)。

我没有处理任何触摸等 - 我只是想了解为什么缩放视图没有留在我滚动的位置?

CGRect viewFrame = self.view.frame ;
    viewFrame.size.width *= 1.5;
    viewFrame.size.height *= 1.5;
    CGSize mySize = viewFrame.size;

    [ ((UIScrollView *) self.view) setContentSize: mySize];

    self.view.transform =   CGAffineTransformMakeScale(1.5, 1.5);

我真正想要完成的是类似于 iPad 上的 Number(相同的代码可以在 iPhone 上运行):

有很多控件的视图 就在上面(订单输入表) 用户可以放大整个表单,使所有元素看起来更大 用户可以平移表单,从而将各种元素带入屏幕的可见区域。

看来 UIScrollView 应该能够处理缩放和平移操作(目前我正在使用仿射变换来放大订单输入表单和 iPad)

谢谢

【问题讨论】:

【参考方案1】:

当你变换一个视图时,你也变换了它的内部坐标系。这意味着,如果您缩放视图,视图仍然“认为”它与缩放之前的大小相同,因为它的坐标单位也会缩放。

例如,如果您有一个尺寸为 (50,50) 的图像视图,并且您将其转换为覆盖屏幕上的 (200,200),当您询问图像视图的大小时,它会报告它大小仍然是 (50,50)。

滚动视图是不常见的视图类型,因为它们了解相对于物理设备屏幕的绝对大小才能正常工作。当您转换它们的坐标系时,它们会失去与物理设备屏幕的连接,并且无法再正常工作。这就是你所看到的。

我还没有这样做,但我很确定会在滚动视图中创建缩放的错觉,您增加滚动视图的框架然后转换其子视图(或转换子视图然后增加框架滚动视图包含新的子视图大小。)这是保持滚动视图与物理设备屏幕同步的唯一方法。

【讨论】:

我完全忽略了坐标系发生变化的事实!!谢谢。我将研究用于平移和缩放的滚动视图内置工具

以上是关于UIScrollView 的问题的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式选择 UIScrollView 中显示的当前按钮

如何检测 UIScrollView 何时变为可滚动?

iOS - UIScrollView 中的按钮点击动画

UIScrollView 中有多个 UIViewController 可以吗?

如何在垂直 UIScrollView 中显示文本和其他对象?

如何使 UIScrollView 与自动布局和动态内容一起使用? [复制]