版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2017.11.22 |
前言
在app中杂靶,很多時(shí)候都需要熟悉一些小技巧讓您事半功倍,提高工作效率呀狼,這些小技巧都很小很細(xì)等曼。感興趣的可以看看我寫的其他小技巧里烦。
1. 實(shí)用小技巧(一):UIScrollView中上下左右滾動(dòng)方向的判斷
2. 實(shí)用小技巧(二):屏幕橫豎屏的判斷和相關(guān)邏輯
3.實(shí)用小技巧(三):點(diǎn)擊手勢(shì)屏蔽子視圖的響應(yīng)
4.實(shí)用小技巧(四):動(dòng)態(tài)的增刪標(biāo)簽視圖
5.實(shí)用小技巧(五):通過相冊(cè)或者相機(jī)更改圖標(biāo)
6.實(shí)用小技巧(六):打印ios里所有字體
7. 實(shí)用小技巧(七):UITableViewCell自適應(yīng)行高的計(jì)算
8. 實(shí)用小技巧(八):數(shù)字余額顯示的分隔
9.實(shí)用小技巧(九):類頭條模糊背景的實(shí)現(xiàn)
10.實(shí)用小技巧(十):晃動(dòng)手機(jī)換后臺(tái)服務(wù)器網(wǎng)絡(luò)
11.實(shí)用小技巧(十一):scrollView及其子類顯示的一些異常處理
12.實(shí)用小技巧(十二):頭像圖片縮放以及保存到相冊(cè)簡(jiǎn)單功能的實(shí)現(xiàn)
13.實(shí)用小技巧(十三):一種類酷我音樂盒動(dòng)畫實(shí)現(xiàn)
14.實(shí)用小技巧(十四):生成跳往applestore指定app的方法
15.實(shí)用小技巧(十五):左側(cè)向右滑動(dòng)返回上一級(jí)控制器
16.實(shí)用小技巧(十六):獲取設(shè)備信息
17.實(shí)用小技巧(十七):清除緩存目錄
18.實(shí)用小技巧(十八):取出gif圖的每一幀
19.實(shí)用小技巧(十九):獲取相機(jī)和麥克風(fēng)權(quán)限
20.實(shí)用小技巧(二十):游客模式的實(shí)現(xiàn)
21.實(shí)用小技巧(二十一):版本檢測(cè)的實(shí)現(xiàn)
22.實(shí)用小技巧(二十二):鍵盤遮擋問題
23. 實(shí)用小技巧(二十三):獲取閃光燈的控制
24. 實(shí)用小技巧(二十四):APP頁(yè)面開啟跳轉(zhuǎn)邏輯處理
25. 實(shí)用小技巧(二十五)—— 關(guān)于UILabel控件寬高的計(jì)算
26. 實(shí)用小技巧(二十六)—— APP中各種權(quán)限監(jiān)測(cè)和申請(qǐng)工具封裝
27. 實(shí)用小技巧(二十七)—— 控制器跳轉(zhuǎn)邏輯的封裝
功能需求
要求可以對(duì)字符串進(jìn)行遍歷凿蒜,并將其分解為數(shù)組中的每一個(gè)元素禁谦。
功能實(shí)現(xiàn)
大家知道,字符串可以用enumerate
方法進(jìn)行遍歷废封,下面我們看另外一種遍歷的方式州泊。還是直接看代碼。
在寫代碼之前要引入CoreText框架漂洋。
#import <CoreText/CoreText.h>
看詳細(xì)代碼遥皂。
#import "ViewController.h"
#import <CoreText/CoreText.h>
@interface ViewController ()
@end
@implementation ViewController
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *label = [[UILabel alloc] init];
label.text = @"我是一只小小鳥??niao!";
NSArray *stringArr = [self getStringArrFromLabel:label];
NSLog(@"數(shù)組是 = %@", stringArr);
}
#pragma mark - Object Private Function
- (NSArray *)getStringArrFromLabel:(UILabel *)label
{
if (!label.text) {
label.text = @"";
}
NSString *text = [label text];
UIFont *font = [label font];
CGRect rect = [label frame];
CTFontRef myFont = CTFontCreateWithName((__bridge CFStringRef)([font fontName]), [font pointSize], NULL);
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:text];
[attStr addAttribute:(NSString *)kCTFontAttributeName value:(__bridge_transfer id)myFont range:NSMakeRange(0, attStr.length)];
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attStr);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0,0,rect.size.width,100000));
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);
if (frameSetter) {
CFRelease(frameSetter);
}
if (path) {
CFRelease(path);
}
NSArray *lines = (__bridge NSArray *)CTFrameGetLines(frame);
NSMutableArray *linesArray = [[NSMutableArray alloc]init];
if (frame) {
CFRelease(frame);
}
for (id line in lines)
{
CTLineRef lineRef = (__bridge CTLineRef )line;
CFRange lineRange = CTLineGetStringRange(lineRef);
NSRange range = NSMakeRange(lineRange.location, lineRange.length);
NSString *lineString = [text substringWithRange:range];
[linesArray addObject:lineString];
}
return (NSArray *)linesArray;
}
@end
下面我們看輸出結(jié)果
2017-11-22 21:38:23.536399+0800 JJStringEnumerate[1033:14545] 數(shù)組是 = (
"\U6211",
"\U662f",
"\U4e00",
"\U53ea",
"\U5c0f",
"\U5c0f",
"\U9e1f",
"\Ud83d\Udc26",
n,
i,
a,
o,
"\Uff01"
)
根據(jù)輸出結(jié)果刽漂,我們可以看到演训,字符串的每一個(gè)單元字符或者文字都被遍歷出來了,并存在一個(gè)不可變數(shù)組中贝咙,打印出來也完全正確样悟。代碼已經(jīng)上傳至刀客傳奇 - GitHub。
后記
未完庭猩,待續(xù)