代码之家  ›  专栏  ›  技术社区  ›  Alex Gosselin

uiscrollView是否可以调整为水平而不是垂直缩放?(如何)

  •  1
  • Alex Gosselin  · 技术社区  · 14 年前

    我正在尝试创建一个时间线视图,该视图将事件显示为uibuttons,可以按它获取更多信息。

    理想情况下,我希望在uiScrollView上布局按钮,并允许它们水平拉伸/收缩,但不垂直拉伸/收缩。

    我要做的基本上相当于使用捏手势来调整内容视图的大小,使用滚动视图来左右移动——你能给我指出正确的方向吗,或者建议你如何完成类似的事情?

    我的第一个想法是使用uiScrollView缩放uiView子视图,并让uiView子视图包含另一个子视图,该子视图不垂直调整大小,但仅在边界更改时水平调整大小,并禁用垂直滚动。也许我可以跳过这些uiview子视图中的一个,并且只让一个来做所有的事情。感觉就像是我试图把它像一个HTML页面或者其他容器一样拼凑在一起。

    不知道我是否解释得足够好,希望能得到答复,不过,任何帮助都是值得感谢的。

    3 回复  |  直到 14 年前
        1
  •  -2
  •   tc.    14 年前

    假设您实际上不想拉伸/收缩按钮文本,最简单的方法是调整所有按钮的大小。我知道,这是一种痛苦。

        2
  •  9
  •   Rolf Staflin CommonsWare    14 年前

    我已经通过创建一个子类uiview实现了仅水平缩放,它只覆盖setTransform,并在uiScrollView更改缩放比例时将y缩放比例设置为1:

    @interface DiagramStripView : UIView { }
    @end
    
    @implementation DiagramStripView
    
    - (void)setTransform:(CGAffineTransform)newValue;
    {
        newValue.d = 1.0;
        [super setTransform:newValue];
    }
    
    @end
    

    正如类名所示,我的视图保存了一系列图表,每个图表都有一个屏幕宽度。当用户放开时,视图控制器将视图的比例重置为1,并将所有内容重新绘制到新的比例:

    - (void) scrollViewDidEndZooming:(UIScrollView *)scrollView 
                            withView:(UIView *)view atScale:(float)scale 
    {
        diagramStripView.transform = CGAffineTransformIdentity;
        [self redrawDiagrams:scale];
    }
    
        3
  •  0
  •   Jason    14 年前

    还没试过,但你可以试着把所有东西都放在 UIScrollView ,并且每当检测到缩放级别更改时,请将所有子视图转换调整为 CGAffineTransformMakeScale(1.0, 1.0/zoomLevel) . 这样,滚动视图将所有内容都放大,但每个子视图都会垂直向下缩放,从而取消了缩放。