iOS 学习 - 23 加载本地 txt 文件, NSMutableParagraphStyle 段落格式,缩放动画,字体间距
思路:
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 段落格式,缩放动画,字体间距的更多相关文章
- iOS开发-UIWebView加载本地和网络数据
UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档,关于浏览网页榜样可以参考UC,手机必备浏览器,至于文档浏览的手机很多图书阅读软件,UIWebView是一个混合体,具体的功能控件内置 ...
- iOS --- UIWebView的加载本地数据的三种方式
UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIM ...
- Mysql加载本地CSV文件
Mysql加载本地CSV文件 1.系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL Mysql Workbench版本: ...
- UIWebView加载本地html文件
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(, , KScreenWidth, KScreenHeight-)]; ...
- 360chrome,google chrome浏览器使用jquery.ajax加载本地html文件
使用360chrome和google chrome浏览器加载本地html文件时,会报错,提示: XMLHttpRequest cannot load file:///Y:/jswg/code/html ...
- WebView加载本地Html文件并实现点击效果
Webview是用来与前端交互的纽,可以加载本地Html文件,和网页并实现交互的功能. WebView通过WebSetting可以使用Android原生的JavascriptInterface来进行j ...
- @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件
目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...
- ajax加载本地html文件出现 XMLHttpRequest cannot load的问题
谷歌浏览器ajax加载本地html文件出现 XMLHttpRequest cannot load的问题(火狐中不会出现这问题) Cross origin requests are only suppo ...
- easyui 加载本地json 文件的方法
easyui 加载本地json 文件的方法 2017年12月15日 17:18:07 vivian_hnd 阅读数 2155 https://blog.csdn.net/vivian_wang07/a ...
随机推荐
- EntityFramework之原始查询如何查询未映射的值,你又知道多少?
前言 今天又倒腾了下EF,如题所示,遇到了一些问题,并最终通过尝试找到了解决方案,可能不是最终的解决方案,若你有更好的解决方案,望告知,同时通过阅读此文,定让你收获不少. 引入 当我们查询时一直是中规 ...
- 应用程序框架实战二十一:DDD分层架构之仓储(介绍篇)
前面已经介绍过Entity Framework的工作单元和映射层超类型的封装,从本文开始,将逐步介绍仓储以及对查询的扩展支持. 什么是仓储 仓储表示聚合的集合. 仓储所表现出来的集合外观,仅仅是一种模 ...
- iPhone 6/plus iOS Safari fieldset border 边框消失
问题:iPhone6 plus 手机浏览网页,fieldset border 边框消失. 示例代码: <div> <fieldset style="border: 1px ...
- SharePoint Server 2013 让上传文件更精彩
新版的SharePoint 2013 提供了多种上传与新建文件的方式,对于与系统集成紧密的IE来上传文档更加方便 使用IE开启SharePoint地址 Figure 1打开文档库,在"新颖快 ...
- Xen之初体验:HA(额外附加)
高可用性,虽说不是在这个版本就开始免费的,但是连续的体验一下会更加完整些. Figure 9在资源池的位置上右击选择High Availability,进入到配置HA的窗口中 Figure 10在资源 ...
- ASP.NET实现微信功能(2)(服务号高级群发)
前面写了一篇文章,关于微信的:http://www.cnblogs.com/kmsfan/p/4047097.html 今天打算来写本系列的第二批文章,服务号后台群发. 在写本篇文章之前,我们先来看看 ...
- Linux服务器(Ubuntu14.04)添加远程连接VNC Server
1.打开终端输入:sudo apt-get install xrdp, 2. sudo apt-get install vnc4server , 3. sudo apt-get install ...
- 【原创】新手入门一篇就够:从零开发移动端IM
一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...
- VMware Workstation 10.0 正式版官方简体中文下载(附序列号)
虚拟机界数一数二的王者软件VMWare Workstation 今日推出了最新的VMware Workstation 10.0 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...
- 匿名方法与Lambda表达式
1.匿名方法 在学习委托时,我们知道委托实例至少要绑定一个方法才能使用,而调用委托实际上是调用了它所关联地方法.一般来说,需要定义一个与委托签名相符的方法,并使之与委托变量关联.如以下代码: Acti ...