2011-06-03 97 views
0

編輯 - 我已經弄清楚我原來的做錯了。我改變了UIScrollView的大小,而不是模式子視圖。我已經解決了這個問題,但是用這個新問題修正了我的問題。如何讓我的圖案視圖延伸而不伸展?

我在我的應用程序中使用紙張效果製作備註部分。這些行位於單獨的UIScrollView上,它響應scrollViewDidScroll:,因此行和文本總是一起移動。我行建立了這樣的viewWillAppear

CGRect noteLinesRect = CGRectMake(self.view.bounds.origin.x, 
            self.view.bounds.origin.y, 
            self.view.bounds.size.width, 
            noteTextView.contentSize.height+self.view.bounds.size.height); 

UIScrollView *anoteXLinesView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
self.noteXLinesView = anoteXLinesView; 
[anoteXLinesView release]; 

LinePatternView *linesPattern = [[LinePatternView alloc] initWithFrame:noteLinesRect]; 
self.linesPatternView = linesPattern; [linesPattern release]; 
[self.noteXLinesView addSubview:self.linesPatternView]; 
[linesPattern release]; 

CGPoint newOffset = CGPointMake(self.noteTextView.contentOffset.x, noteTextView.contentOffset.y - NOTE_LINES_OFFSET); 
self.noteXLinesView.contentOffset = newOffset; 

[self.view insertSubview:self.noteXLinesView atIndex:0]; 

此工作正常時,用戶首先着眼於存儲說明 - 所有的文字是很好的下劃線。但是當他們寫出更多的文字時,他們最終會到達我在viewWillAppear中創建的線條的底部,並寫在'空白紙'上。所以我需要我的內襯紙模式動態地變得越來越小,所以它總是比我的textView的contentSize大一些。我想是這樣做的:

-(void)textViewDidChange:(UITextView *)textView 
{ 
    self.linesPatternView.frame = CGRectMake(self.linesPatternView.frame.origin.x, //-self.noteTextView.contentOffset.y+NOTE_LINES_OFFSET, 
               self.linesPatternView.frame.origin.y, 
               self.linesPatternView.frame.size.width, 
               noteTextView.contentSize.height+self.view.bounds.size.height); 
} 

的問題是,雖然內襯紙模式確實在尺寸增加,它不會在底部添加新行。相反,隨着視圖變大,圖案伸展並變大。我究竟做錯了什麼?

回答

1

其中一個解決方案是製作3個視圖,每個視圖都包含屏幕上滾動視圖框架的大小。在滾動視圖中將三者置於另一個之下並通過其委託監視滾動視圖。一旦

爲最頂層的人去爲屏幕之外除Y像素越多,你從滾動視圖中取出並插入它的底部下方的一個:

當向下滾動您檢查。

當向上滾動您檢查:

一旦最下面的人去爲屏幕之外除Y像素從滾動視圖中取出並插入其上方的頂部多了一個。

+0

一個非常聰明的想法,但有一個障礙:我的'紙'的頂部有點不同,而模式只在它下面開始。爲了按照你的建議去做,模式必須是我的垂直對稱。 – 2011-06-03 15:27:45

0

固定!除了上述問題編輯中概述的更改外,我只需在調整大小之後調用[self.linesPatternView setNeedsDisplay];即可。

1

是不是有一個原因,你不是簡單地使用平鋪模式作爲背景視圖的backgroundColor? UIColor的+colorWithPatternImage:將讓您設置無限期平鋪的背景,並且不會隨着視圖的大小調整而延伸。如果背景的一部分必須與您的紙張的頂部不同,例如您可以將包含該背景的圖像視圖放置在背景視圖的頂部。