zoukankan      html  css  js  c++  java
  • 关于备忘录中文本线的解决方案(可计算光标坐标)

    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水平以及理解自我反思---01
    继承后- 构造器的特点
    指针函数
    C数组灵活多变的访问形式
  • 原文地址:https://www.cnblogs.com/ydhliphonedev/p/2181334.html
Copyright © 2011-2022 走看看