• 关于备忘录中文本线的解决方案(可计算光标坐标)


    iPhone自带的备忘录软件有着不错的用户界面,那它的文本线是怎么实现的呢?不知道.知道的大神请留下解决方案.

    不过几个几天的摸索,总算是想出了一条解决方案来,下面简单的描述下,希望能说的清楚.

    首先我觉得需要二张图片,一张是编辑区域上面的没有横线的黄色区域,一张是编辑区域带横线的黄色区域

    需要的组件有:UIScrollView一个,UIView一个,UITextView一个

    叠加方式为:[UIScrollView addSubView:[UIView addSubView:UITextView]];

    UIScrollView的背景设为第一张图片形式,即

    _scrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"title.png"]];

    其中_scrollView为UIScrollView,@"title.png"为第一张图片

    UIView的背景设为第二张图片形式,即

    _backView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"linemin.png"]];

    其中_backlView为UIView,@"linemin.png"为第二张图片

    UITextView的背景设为透明色

    到此基本解决完毕了,但是有个问题就是默认光标被隐藏了UIScollView才会向下滑动以显示光标.

    ...

    要实现自己控制光标的显示位置需要解决二个问题,第一是知道光标的坐标,另一个是如何无误先控制UIScollView滚动.

    计算光标的坐标比较麻烦,经过几天的学习,找到了计算光标坐标的方法

    下面的代码可计算出光标的y坐标(我们只要y坐标,x坐标经过一些补充也可计算出来,自己添加)

    - (int)getCursorPointY:(UITextView *)curtextView
    {
    CGPoint cursorPoint;
    int Len = curtextView.selectedRange.location;
    NSString
    *stringToCursor = [curtextView.text substringToIndex:Len];
    NSArray
    *partStrArr = [stringToCursor componentsSeparatedByString:@"\n"];
    int row = [partStrArr count];
    CGSize fontsize
    = [@"" sizeWithFont:[curtextView font]];
    for (NSString *partStr in partStrArr)
    {
    CGSize partStrSize
    = [partStr sizeWithFont:[curtextView font] constrainedToSize:curtextView.contentSize lineBreakMode:UILineBreakModeCharacterWrap];
    NSLog(
    @"partStrSize.width = %f,partStrSize.height = %f",partStrSize.width,partStrSize.height);
    int rowG = partStrSize.height/fontsize.height;
    if (rowG >1) {
    rowG
    -=1;
    row
    += rowG;
    }

    }

    cursorPoint.y
    = (row -1)*fontsize.height;

    return (int)(cursorPoint.y);
    }

    到此可计算出光标Y坐标,这样用UIScollView的contentOffset设置滚动时还存在问题,就是会和默认到光标消失滚动的方法产生干扰.

    我们可以通过重载UIScollView的- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;方法屏蔽默认到光标消失滚动的方法,并加入自己的控制方法.

    到此,一个比较完整的解决方案产生了.

    大家积极思考,看看有没有更好的解决方法.

    by MAC-z

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/ydhliphonedev/p/2181334.html
Copyright © 2020-2023  润新知