如何在不拉伸的情况下延长图案视图?

时间:2011-06-03 14:58:43

标签: iphone cocoa-touch uiscrollview uitextview

编辑 - 我已经弄明白我最初做错了什么。我正在改变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 );
}

问题是,尽管衬纸图案的尺寸确实增加,但它不会在底部添加新的线条。相反,随着视图变大,模式会延伸并变大。我做错了什么?

3 个答案:

答案 0 :(得分:1)

其中一个解决方案是制作3个视图,每个视图包含屏幕上滚动视图框大小的行。您在滚动视图中将三者置于另一个之下,并通过其委托监视scrollview。

向下滚动时,请检查:

一旦最上面的一个离屏超过Y像素,你就会从滚动视图中将其移除并将其插入底部的下方。

向上滚动时,请检查:

一旦最下面的一个离屏超过Y像素,你就将它从滚动视图中移除并将其插入顶部的上方。

答案 1 :(得分:1)

您是不是只使用平铺图案作为背景视图backgroundColor? UIColor的+colorWithPatternImage:将允许您设置一个无限平铺的背景,并且在您的视图调整大小时不会延伸。如果背景的一部分必须不同 - 例如纸张的顶部 - 您可以在背景视图的顶部放置一个包含该背景的图像视图。

答案 2 :(得分:0)

固定!除了我对上述问题的修改中列出的更改之外,我只需在调整大小后调用[self.linesPatternView setNeedsDisplay];