代码之家  ›  专栏  ›  技术社区  ›  leon

uiscrollview的问题

  •  0
  • leon  · 技术社区  · 14 年前

    对不起,这封信太长了。

    我试图理解uiscrollview并遇到一个非常简单的问题。

    1. 我正在创建一个滚动视图
    2. 我把这张照片放大了1.5倍
    3. 使用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 回复  |  直到 14 年前
        1
  •  3
  •   TechZen    14 年前

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

    例如,如果您有一个大小为(50,50)的图像视图,并且您对其进行变换以使其覆盖屏幕上的(200200),当您询问图像视图其大小时,它将报告其大小仍然为(50,50)。

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

    我没有这样做,但我很确定要在滚动视图中创建缩放的幻觉,您可以增加滚动视图的框架,然后转换其子视图(或者转换子视图,然后增加滚动视图的框架以包含新的子视图大小)。与物理设备屏幕同步的滚动视图。