我正在我的应用中制作一个带有纸质效果的笔记部分。这些行位于单独的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 );
}
问题是,尽管衬纸图案的尺寸确实增加,但它不会在底部添加新的线条。相反,随着视图变大,模式会延伸并变大。我做错了什么?
答案 0 :(得分:1)
其中一个解决方案是制作3个视图,每个视图包含屏幕上滚动视图框大小的行。您在滚动视图中将三者置于另一个之下,并通过其委托监视scrollview。
向下滚动时,请检查:
一旦最上面的一个离屏超过Y像素,你就会从滚动视图中将其移除并将其插入底部的下方。
向上滚动时,请检查:
一旦最下面的一个离屏超过Y像素,你就将它从滚动视图中移除并将其插入顶部的上方。
答案 1 :(得分:1)
您是不是只使用平铺图案作为背景视图backgroundColor
? UIColor的+colorWithPatternImage:
将允许您设置一个无限平铺的背景,并且在您的视图调整大小时不会延伸。如果背景的一部分必须不同 - 例如纸张的顶部 - 您可以在背景视图的顶部放置一个包含该背景的图像视图。
答案 2 :(得分:0)
固定!除了我对上述问题的修改中列出的更改之外,我只需在调整大小后调用[self.linesPatternView setNeedsDisplay];
。