2010-08-15 103 views
1

我试图做一个时间表视图,显示事件作为UIButtons可以按下更多的信息。UIScrollView可以适应水平缩放而不是垂直缩放吗? (如何)

理想情况下,我想在UIScrollView上布置按钮,并允许它们水平伸缩,但不垂直。

我想要完成的工作基本上相当于使用捏手势来调整内容视图的大小,并使用滚动视图来左右移动 - 您能指向正确的方向,还是建议您如何完成这样的事情?

我的第一个想法是用UIScrollView来缩放一个UIView子视图,并让UIView子视图包含另一个不会垂直调整大小的子视图,但只能在界限更改时水平移动,并禁用垂直滚动。也许我可以跳过这些UIView子视图中的一个,并且只有一个做所有事情。它只是觉得我试图像一个HTML页面或所有这些容器一起黑客一起。

不知道我是否已经解释过这些问题,希望得到答案,但任何帮助都是值得赞赏的。

回答

-1

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

+0

这确实是最好的方法。这并不像我想象的那么艰难,最困难的部分是如何在屏幕上添加和删除屏幕视图,当它们重叠时。 – 2010-11-19 04:48:16

0

还没有尝试过这种方式,但是您可以尝试将所有内容放在UIScrollView中,并且每当检测到缩放级别更改时,将所有子视图转换调整为CGAffineTransformMakeScale(1.0, 1.0/zoomLevel)。这样,滚动视图缩放了所有东西,但每个子视图都是垂直向下缩放,取消缩放。

+0

我怀疑你是在正确的轨道上,我的努力还没有工作,虽然,你在哪里在子视图中设置仿射变换? – 2010-08-15 23:49:47

+0

在'scrollViewDidZoom'委托回调中。还没有尝试过。 – Jason 2010-08-16 03:13:22

+0

对不起,我的意思是选择我要求的子视图,即: [subview setSomething:CGAffineTransformMakeScale(1.0,1.0/zoomLevel)]; – 2010-08-17 04:35:17

8

我实现了水平,只有创造UIView的,仅仅覆盖的setTransform和设置Y比例为1的子类,每当改变的UIScrollView规模缩放:

@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]; 
} 
+0

如果您将此技术与平铺视图(作为缩放视图)结合使用,那么您将获得一个非常漂亮的水平可缩放时间轴视图,该视图只会绘制所需的视图。 – CaseyB 2014-01-15 16:22:21