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 中有多个 UIViewController 可以吗?