我想创建一个像iPhone上的笔记应用程序这样的视图,因此需要视图按照笔记应用程序划分线条,我已经在需要获取的窗口中完成此操作字体规格,然后绘制线条到设备上下文,有没有人在UITextView中做到了这一点,如果这样一些帮助将appriciated在iPhone的UITextView上绘制直线条
回答
你可以尝试设置的backgroundColor你的TextView使用图像与格线
textView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"RuledLinesPage.png"]];
如果要填充颜色的区域大于图像,则带图案图像的颜色会创建平铺图像。所以你必须确保图像大小是正确的大小/花木(我不认为'花木'是一个真正的词,但我希望你明白我的意思)。此外,您将不得不使用直线创建图像以最好地匹配您的textView字体。
祝你好运。
@lukya, 因为当我们滚动UITextView时,你的解决方案有点麻烦,文本只滚动离开行(来自图像)在它的位置。
更好的解决方案是将子视图添加到您的文本视图中绘制线条。您需要在文本视图中添加观察者,以随着文本增加/减少来跟踪其内容大小的变化。
这应该是对答案的评论,而不是“答案”本身。 – Santa 2010-08-18 06:16:33
我认为这个工作正常,但我觉得它已被黑客入侵,我没有完全摒弃UITextView类的机制;
首先你必须添加以下到您的委托来迫使滚动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"scrollViewDidScroll The scroll offset is ---%f",scrollView.contentOffset.y);
[noteText setNeedsDisplay];
}
然后在子类中实现的drawRect一个重绘所以
- (void)drawRect:(CGRect)rect {
// Drawing code
// Get the graphics context
CGContextRef ctx = UIGraphicsGetCurrentContext();
[super drawRect:rect];
// Get the height of a single text line
NSString *alpha = @"ABCD";
CGSize textSize = [alpha sizeWithFont:self.font constrainedToSize:self.contentSize lineBreakMode:UILineBreakModeWordWrap];
NSUInteger height = textSize.height;
// Get the height of the view or contents of the view whichever is bigger
textSize = [self.text sizeWithFont:self.font constrainedToSize:self.contentSize lineBreakMode:UILineBreakModeWordWrap];
NSUInteger contentHeight = (rect.size.height > textSize.height) ? (NSUInteger)rect.size.height : textSize.height;
NSUInteger offset = 6 + height; // MAGIC Number 6 to offset from 0 to get first line OK ???
contentHeight += offset;
// Draw ruled lines
CGContextSetRGBStrokeColor(ctx, .8, .8, .8, 1);
for(int i=offset;i < contentHeight;i+=height) {
CGPoint lpoints[2] = { CGPointMake(0, i), CGPointMake(rect.size.width, i) };
CGContextStrokeLineSegments(ctx, lpoints, 2);
}
}
还是担心这个神奇的数字6
Bob
伟大的解决方案。但是我已经将@Dave的'self.contentMode = UIViewContentModeRedraw;'添加到子类init方法中,而不是'setNeedsDisplay'方法。 – Reggian 2012-05-23 22:13:27
子类UITextView。 Override -drawRect:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
CGContextSetLineWidth(context, self.lineWidth);
CGFloat strokeOffset = (self.lineWidth/2);
CGFloat rowHeight = self.font.lineHeight;
if (rowHeight > 0) {
CGRect rowRect = CGRectMake(self.contentOffset.x, - self.bounds.size.height, self.contentSize.width, rowHeight);
while (rowRect.origin.y < (self.bounds.size.height + self.contentSize.height)) {
CGContextMoveToPoint(context, rowRect.origin.x + strokeOffset, rowRect.origin.y + strokeOffset);
CGContextAddLineToPoint(context, rowRect.origin.x + rowRect.size.width + strokeOffset, rowRect.origin.y + strokeOffset);
CGContextDrawPath(context, kCGPathStroke);
rowRect.origin.y += rowHeight;
}
}
}
当你初始化文本视图时,一定要将contentMode设置为UIViewContentModeRedraw。否则,这些行不会随文本一起滚动。
self.contentMode = UIViewContentModeRedraw;
这并不完美。理想情况下,你应该画出通过的矩形。但我很懒,这符合我的需求。
你可以在此扩展吗?例如。什么是rowNumber? – 2012-03-13 01:23:00
对不起。当我复制并粘贴代码时,只剩下代码。我不相信这与这段代码有关。我已将其删除。 – 2013-05-07 18:32:48
@DaveBatton什么是self.lineWidth?它是静态还是动态? – Hitarth 2013-06-04 06:33:12
- 1. 在UITextView中绘制直线
- 2. 绘制直线的线条
- 3. 在gtk.TextView上绘制线条
- 4. 如何在iPhone上垂直绘制NSString?
- 5. 在DrawingFrame上绘制线条与外线
- 6. 如何检测绘制在直线上的线条上的触摸?
- 7. 如何在iPhone上绘制简单的线条动态图形
- 8. Vue-chartjs绘制多条直线图
- 9. 在Android上的TextView下绘制线条
- 10. iPhone OpenGL绘制一条实线?
- 11. 使用阵列点在iPhone上绘制多条线/路径
- 12. 在iPhone上使用Quartz绘制虚线
- 13. 在窗体上绘制线条网格
- 14. 在QtWidget上动态绘制线条
- 15. 在拍摄图像上绘制线条
- 16. Windowsforms:如何在DataGridView上绘制线条?
- 17. 用PyQt在图像上绘制线条
- 18. 在x轴上绘制多条线Highcharts
- 19. 在c#图上绘制一条线
- 20. 如何在图表上绘制线条?
- 21. 如何在iPad上绘制线条图?
- 22. 未在Google地图上绘制线条
- 23. 在Android上使用surfaceView绘制线条
- 24. 在地图上绘制一条线
- 25. MoniTouch在UIImage上绘制线条
- 26. 通过iPhone上的手指触摸绘制线条
- 27. 如何在两条其他平行线之间绘制直线?
- 28. 在iPhone中绘制曲线?
- 29. 如何在matlab中绘制一条直线的垂直平分线?
- 30. 绘制一条平均曲线的直线
聪明,如果它的工作。该图像可以通过编程生成以适应字体。 – Justin 2010-08-16 10:32:50