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


    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

  • 相关阅读:
    RecyclerView
    Android动态广播的注册与销毁
    使用FFmpeg让mp4转gif
    当你安装python3没有安装依赖环境yum install -y libffi-devel,pip和setuptools,pip会装不上,不安装yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel lib
    遇到的39.0或者其他版本不匹配的问题,请找对路径
    yaml创建学习(第二天)
    yaml 测试用例 (学习第一天)
    关于二次封装css selector 的复数定位
    uiautomatorviewer报错“Error taking device screenshot: EOF” ,
    appium解决每次运行都需要安装Unlock以及AppiumSetting的问题
  • 原文地址:https://www.cnblogs.com/ydhliphonedev/p/2181334.html
Copyright © 2020-2023  润新知