【问题标题】:How can I make my pattern view extend without stretching?如何使我的模式视图在不拉伸的情况下扩展?
【发布时间】:2011-06-03 14:58:43
【问题描述】:

编辑 - 我已经找出了我最初做错了什么。我正在更改 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 );
}

问题是,虽然横格纸图案的尺寸确实增加了,但它并没有在底部添加新的线条。相反,随着视图变大,图案会延伸并变大。我做错了什么?

【问题讨论】:

    标签: iphone cocoa-touch uiscrollview uitextview


    【解决方案1】:

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

    向下滚动时检查:

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

    向上滚动时检查:

    一旦最底部的一个离开屏幕超过 Y 像素,您就将其从滚动视图中移除并将其插入到顶部的上方。

    【讨论】:

    • 一个非常聪明的想法,但有一个障碍:我的“纸”的顶部有点不同,图案只从它下面开始。为了按照您的建议进行操作,图案必须垂直对称。
    【解决方案2】:

    您是否有理由不简单地使用平铺图案作为背景视图的backgroundColor? UIColor 的+colorWithPatternImage: 可以让您设置一个无限平铺的背景,并且不会随着您的视图调整大小而拉伸。如果背景的一部分必须不同(例如论文的顶部),您可以在背景视图的顶部放置一个包含该背景的图像视图。

    【讨论】:

      【解决方案3】:

      已修复!除了我在对上述问题的编辑中概述的更改之外,我只需要在调整大小后致电 [self.linesPatternView setNeedsDisplay];

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-04
        相关资源
        最近更新 更多