我正在尝试创建一个时间轴视图,将事件显示为UIButtons,可以按下以获取更多信息。
理想情况下,我想在UIScrollView上布置按钮,并允许它们水平拉伸/收缩,但不能垂直拉伸。
我想要完成的事情基本上相当于使用捏合手势来调整内容视图的大小,并使用滚动视图来左右移动 - 你能指出我正确的方向,或者建议你如何完成这样的事情?
我首先想到的是UIScrollView来缩放UIView子视图,并让UIView子视图包含另一个不垂直调整大小的子视图,但只在边界发生变化时才水平调整,并禁用垂直滚动。也许我可以跳过其中一个UIView子视图,只有一个人可以做任何事情。感觉就像我试图像HTML页面或所有这些容器一样破解它。
我不确定我是否已经足够好地解释了这一点,希望得到答案,但是我们对此表示赞赏。
答案 0 :(得分:9)
我通过创建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];
}
答案 1 :(得分:0)
没有尝试过,但您可以尝试将所有内容放在UIScrollView
中,每当检测到缩放级别更改时,请将所有子视图转换调整为CGAffineTransformMakeScale(1.0, 1.0/zoomLevel)
。这样,滚动视图就可以缩放所有内容,但是每个子视图都会垂直向下缩放,取消缩放。
答案 2 :(得分:-2)
假设您实际上不想拉伸/缩小按钮文本,最简单的方法是调整所有按钮的大小。我知道,这很痛苦。