思路:

  1.new 一个 Empty 后缀为 .txt 文件,内容随笔拷贝一段

  2.用 NSString 接收本地文件,再用一个标题拼接字符串

  3.创建一个 NSMutableParagraphStyle 实例,设置标题居中、标题距离正文间隔

  4.创建一个 NSMutableParagraphStyle 实例,设置正文左对齐、每段开头缩进 10

  5.创建一个基础动画的实例,用代理监听动画结束

话不多说上代码

#pragma mark -- 拼接字符
- (void)loadData:(NSString *)filename { //第一个段落
NSMutableParagraphStyle *first = [[NSMutableParagraphStyle alloc]init];
first.alignment = NSTextAlignmentCenter;
first.lineSpacing = ; //第二个段落
NSMutableParagraphStyle *second = [[NSMutableParagraphStyle alloc]init];
//从左开始写
second.alignment = NSTextAlignmentLeft;
//首行缩进
second.firstLineHeadIndent = ;
//间距
second.lineSpacing = ; UIFont *titleFont = [UIFont systemFontOfSize:];
UIFont *contextFont = [UIFont systemFontOfSize:]; NSMutableAttributedString *str1 = [[NSMutableAttributedString alloc]initWithString:@"游戏许可及服务协议" attributes:@{NSParagraphStyleAttributeName:first,NSFontAttributeName:titleFont}]; //标题拼接正文,正文前加换行符
NSString *str = [NSString stringWithFormat:@"\n%@",filename]; NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc]initWithString:str attributes:@{NSParagraphStyleAttributeName:second,NSFontAttributeName:contextFont}]; [str1 appendAttributedString:str2];
_textView.attributedText = str1;
} #pragma mark -- 关闭动画
- (void)closeAniamtion:(UIView *)view {
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"transform.scale";
animation.toValue = @0.9;
animation.duration = 0.4;
animation.delegate = self;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
[view.layer addAnimation:animation forKey:@"closeAnimation"];
} #pragma mark -- 本地 txt 文件内容
- (NSString *)filename {
//本地 txt 文件
NSString *path = [[NSBundle mainBundle]pathForResource:@"浅遇时光,静好无恙.txt" ofType:nil];
//取出内容
NSString *filename = [[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
return filename;
}
#pragma mark -- 代理监听动画停止
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { if ([_bgView.layer animationForKey:@"closeAnimation"] == anim) {
[_bgView removeFromSuperview];
}
}

字体间距,中文的文字宽度是相等的,英文和数字的宽度不一样

- (void)baseChinese:(UILabel *)label loadFirst:(NSString *)firstStr second:(NSString *)secondStr
{
//第一个段落
NSMutableParagraphStyle *first = [[NSMutableParagraphStyle alloc]init];
//第二个段落
NSMutableParagraphStyle *second = [[NSMutableParagraphStyle alloc]init]; int a = (int)firstStr.length;
int b = (int)secondStr.length; if (a>b) { NSDictionary *dict1 = @{NSParagraphStyleAttributeName:first};
NSMutableAttributedString *firstAttr = [[NSMutableAttributedString alloc]initWithString:firstStr attributes:dict1];
/** 计算间距 **/
CGFloat lineGap = label.font.pointSize *(a-b)/(b-); NSString *longSecondStr = [NSString stringWithFormat:@"\n%@",secondStr];
NSMutableAttributedString *secondAttr = [[NSMutableAttributedString alloc]initWithString:longSecondStr attributes:@{NSParagraphStyleAttributeName:second}];
NSRange range = {,b};
/** 添加间距属性 **/
[secondAttr addAttribute:NSKernAttributeName value:[NSNumber numberWithFloat:lineGap] range:range];
/** 拼接字符串 **/
[firstAttr appendAttributedString:secondAttr];
label.attributedText = firstAttr; }else if(b>a){ NSRange range = {,a};
/** 计算间距 **/
CGFloat lineGap = label.font.pointSize *(b-a)/(a-);
NSDictionary *dict1 = @{NSParagraphStyleAttributeName:first};
NSMutableAttributedString *firstAttr = [[NSMutableAttributedString alloc]initWithString:firstStr attributes:dict1];
/** 添加间距属性 **/
[firstAttr addAttribute:NSKernAttributeName value:[NSNumber numberWithFloat:lineGap] range:range]; NSString *longSecondStr = [NSString stringWithFormat:@"\n%@",secondStr];
NSMutableAttributedString *secondAttr = [[NSMutableAttributedString alloc]initWithString:longSecondStr attributes:@{NSParagraphStyleAttributeName:second}];
/** 拼接字符串 **/
[firstAttr appendAttributedString:secondAttr];
label.attributedText = firstAttr; }else{
/** 如果相等,直接拼接 **/
label.text = [NSString stringWithFormat:@"%@\n%@",firstStr,secondStr];
}
}

完整代码在 github 上,传送门

iOS 学习 - 23 加载本地 txt 文件, NSMutableParagraphStyle 段落格式,缩放动画,字体间距的更多相关文章

  1. iOS开发-UIWebView加载本地和网络数据

    UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档,关于浏览网页榜样可以参考UC,手机必备浏览器,至于文档浏览的手机很多图书阅读软件,UIWebView是一个混合体,具体的功能控件内置 ...

  2. iOS --- UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIM ...

  3. Mysql加载本地CSV文件

    Mysql加载本地CSV文件 1.系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL Mysql Workbench版本: ...

  4. UIWebView加载本地html文件

    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(, , KScreenWidth, KScreenHeight-)]; ...

  5. 360chrome,google chrome浏览器使用jquery.ajax加载本地html文件

    使用360chrome和google chrome浏览器加载本地html文件时,会报错,提示: XMLHttpRequest cannot load file:///Y:/jswg/code/html ...

  6. WebView加载本地Html文件并实现点击效果

    Webview是用来与前端交互的纽,可以加载本地Html文件,和网页并实现交互的功能. WebView通过WebSetting可以使用Android原生的JavascriptInterface来进行j ...

  7. @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件

    目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...

  8. ajax加载本地html文件出现 XMLHttpRequest cannot load的问题

    谷歌浏览器ajax加载本地html文件出现 XMLHttpRequest cannot load的问题(火狐中不会出现这问题) Cross origin requests are only suppo ...

  9. easyui 加载本地json 文件的方法

    easyui 加载本地json 文件的方法 2017年12月15日 17:18:07 vivian_hnd 阅读数 2155 https://blog.csdn.net/vivian_wang07/a ...

随机推荐

  1. EntityFramework之原始查询如何查询未映射的值,你又知道多少?

    前言 今天又倒腾了下EF,如题所示,遇到了一些问题,并最终通过尝试找到了解决方案,可能不是最终的解决方案,若你有更好的解决方案,望告知,同时通过阅读此文,定让你收获不少. 引入 当我们查询时一直是中规 ...

  2. 应用程序框架实战二十一:DDD分层架构之仓储(介绍篇)

    前面已经介绍过Entity Framework的工作单元和映射层超类型的封装,从本文开始,将逐步介绍仓储以及对查询的扩展支持. 什么是仓储 仓储表示聚合的集合. 仓储所表现出来的集合外观,仅仅是一种模 ...

  3. iPhone 6/plus iOS Safari fieldset border 边框消失

    问题:iPhone6 plus 手机浏览网页,fieldset border 边框消失. 示例代码: <div> <fieldset style="border: 1px ...

  4. SharePoint Server 2013 让上传文件更精彩

    新版的SharePoint 2013 提供了多种上传与新建文件的方式,对于与系统集成紧密的IE来上传文档更加方便 使用IE开启SharePoint地址 Figure 1打开文档库,在"新颖快 ...

  5. Xen之初体验:HA(额外附加)

    高可用性,虽说不是在这个版本就开始免费的,但是连续的体验一下会更加完整些. Figure 9在资源池的位置上右击选择High Availability,进入到配置HA的窗口中 Figure 10在资源 ...

  6. ASP.NET实现微信功能(2)(服务号高级群发)

    前面写了一篇文章,关于微信的:http://www.cnblogs.com/kmsfan/p/4047097.html 今天打算来写本系列的第二批文章,服务号后台群发. 在写本篇文章之前,我们先来看看 ...

  7. Linux服务器(Ubuntu14.04)添加远程连接VNC Server

    1.打开终端输入:sudo apt-get install xrdp,   2. sudo apt-get install vnc4server ,  3. sudo apt-get install ...

  8. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  9. VMware Workstation 10.0 正式版官方简体中文下载(附序列号)

    虚拟机界数一数二的王者软件VMWare Workstation 今日推出了最新的VMware Workstation 10.0 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...

  10. 匿名方法与Lambda表达式

    1.匿名方法 在学习委托时,我们知道委托实例至少要绑定一个方法才能使用,而调用委托实际上是调用了它所关联地方法.一般来说,需要定义一个与委托签名相符的方法,并使之与委托变量关联.如以下代码: Acti ...