UIScrollView问题

时间:2010-04-18 06:10:53

标签: iphone uiscrollview

很抱歉长篇大论。

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

  1. 我正在创建滚动视图
  2. 我将此视图设置为比正常尺寸大1.5尺寸
  3. 使用UIScrollView我希望看到一些边界元素超出边界,但应该能够平移视图,从而将缺少的元素带回可见区域。
  4. 但是我看到我无论如何都不能平移/滚动视图,而是只要我的手指离开屏幕(触摸结束事件),视图总是要向上滚动。

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

    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上的数字(相同的代码适用于iPhone):

    • 有一个包含大量控件的视图 在它上面(订单输入表格)
    • 用户可以放大整个表单,以便所有元素看起来更大
    • 用户可以平移表单,从而将各种元素带入屏幕的可见区域。

    似乎UIScrollView应该能够处理缩放和平移动作(现在我使用仿射变换来放大订单输入表格和iPad)

    由于

1 个答案:

答案 0 :(得分:3)

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

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

Scrollviews是不同寻常的视图类型,因为他们已了解相对于物理设备屏幕的绝对大小,以便正常工作。当您转换其坐标系时,它们会丢失与物理设备屏幕的连接,并且无法再正常运行。这就是你所看到的。

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