2010-08-15 92 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