蓝懿ios技术交流和心得分享16.1.19

编程入门 行业动态 更新时间:2024-10-24 20:22:02

蓝懿ios<a href=https://www.elefans.com/category/jswz/34/1758282.html style=技术交流和心得分享16.1.19"/>

蓝懿ios技术交流和心得分享16.1.19

iOS sdk中为我们提供了一套完善的文字排版开发组件

:CoreText。CoreText库中提供了很多的工具来对文本进行操作,例如CTFont、CTLine、CTFrame等。利用这些工具可以对文字字体每一行每一段落进行操作。

此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。

 

1.         首先,需要引入CoreText库

 

在需要使用的类文件中添加#import 头文件。

2.         设置文本的参数

创建一个NSMutableAttributedString对象,包含所需展示的文本字符串。这样就可以对其进行设置了。通过CTFontCreateWithName函数创建一个CTFont对象,利用NSMutableAttributedString对象的addAttribute方法进行设置。类似的方法可以设置字间距。

对其方式与行间距的设置方式:

[cpp] view plain

copy

print

?

  1. // 文本对齐方式   
  •     CTTextAlignment alignment = kCTLeftTextAlignment;   
  •     CTParagraphStyleSetting alignmentStyle;   
  •     alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;   
  •     alignmentStyle.valueSize = sizeof

(alignment);   

  •     alignmentStyle.value = &alignment;   
  •  // 创建设置数组 

  

  •             CTParagraphStyleSetting settings[] ={alignmentStyle};   
  • CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);   

同样使用addAttribute设置字符串对象。这样的方法还可以设置行间距,段间距等参数。

3.         计算图片所占高度。图片可以使用UIImageView 来进行显示。很容易便可获取每张图片所占总高度。

4.         由于图片宽度是固定的这样就可以计算每行文字缩短的字数。只要文本的总体高度低于图像总高度则文字长度都是缩短的。用CTTypesetterSuggestLineBreak函数动态的计算每一行里的字数,因为每一行里面的中文字、标点符号、数字、字母都不一样所以可以显示的字数肯定也是不同的,所以需要作这样的计算。这样循环直至文本结束,就可以知道有多少行字了。再根据字体高度和行间距得出总的文本高度,如果文本高度大于图片总高度那么显示区域的Frame高度就是文本的高度,反之亦然。

5.         绘制文本:

设置每一行绘制文本的区间:

[cpp]

 view plaincopyprint?

  1. CFRange lineRange = CFRangeMake(currentIndex, lineLength);   
  • 建立文本行对象   
  • CTLineRef line = CTTypesetterCreateLine(typeSetter, lineRange);   
  • CGFloat x = [self textOffsetForLine:line inRect:self.bounds];   
  • // 设置一行的位置 

  

  • CGContextSetTextPosition(context, x, y);   
  • // 绘制一行文字 

  

  •     CTLineDraw(line, context);   

6.         其他功能:

在完成文本绘制功能后可以加入调整文字大小的功能,和图片的放大的功能。

文字大小可以通过直接设置字体大小后重新绘制文本来实现。

图片放大可以在视图上添加一个新的UIImageView 来展示放大后的图片,并且加入动画效

如何发送本地推送通知

推送通知也属于UI的一部分,所以推送通知对象是以UI开头。

将发送通知的代码方法控制器的-touchesBegan: withEvent: 中测试比较合适,如果放到viewDidLoad方法,用户的注册请求还没有完成方法就调用了。

创建本地通知对象

1

2

//  创建本地通知对象

UILocalNotification*ln=[[UILocalNotification alloc]init];

设置本地通知属性

//  1.设置通知的内容(如果此属性不设置是不会发送通知的)

ln.alertBody=@"小明,你妈叫你回家吃饭了!";

//  2.设置通知触发的开始时间

ln.fireDate=[NSDate dateWithTimeIntervalSinceNow:3];

//  3.设置重复通知的时间,间隔

ln.repeatInterval=NSCalendarUnitSecond;

//  4.设置重复执行使用日历(用户设置的日历)

ln.repeatCalendar=[NSCalendar  currentCalendar];

//    NSString * const NSGregorianCalendar; 公历

//    NSString * const NSChineseCalendar; 农历

//    ln.repeatCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];

//  5.设置应用图标右上角的数字

ln.applicationIconBadgeNumber=3;

//  6.设置点击推送通知进入界面的时候显示,加载图片

ln.alertLaunchImage=@"";

//  7 设置通知的音效(只有真机有效)

local.soundName=UILocalNotificationDefaultSoundName;

//  8 设置一些额外信息

local.userInfo=@{@"QQ":@"55555",@"info":@"约了没"};

 

//  iOS8.0 以后新增属性

//  ************************************

//  1.设置区域,进入或离开某个区域的时候触发

//    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(40.1,106.1);

//    ln.region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:10.0 identifier:@"ab"];

//  2.设置进入或离开某个区域只执行一次

//    ln.regionTriggersOnce = YES;

//  ***************************************

 

//  iOS8.2 新增属性

//    ln.alertTitle = @"通知标题";

使用应用 UIApplication 调度本地通知

1

2

//  让应用调度通知

[[UIApplication sharedApplication]scheduleLocalNotification:ln];

本地推送通知页面跳转

无论应用是在前台,后台还是已经关闭都能如期接收到本地通知,但是当用户点击通知进入应用的时候,我们需要根据不同情况,进行处理

AppDelegate本地通知代理方法

-(void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification{

    

    //  当应用在前台时候什么都不做

更多推荐

蓝懿ios技术交流和心得分享16.1.19

本文发布于:2024-02-11 20:46:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1683382.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:技术交流   心得   ios

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!