久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

好程序員學習筆記-IOS 利用core text對文字進行排版

時間:2019-05-12 19:44:01下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《好程序員學習筆記-IOS 利用core text對文字進行排版》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《好程序員學習筆記-IOS 利用core text對文字進行排版》。

第一篇:好程序員學習筆記-IOS 利用core text對文字進行排版

core text 這個包默認是沒有的,要自己手動添加進來。在IOS中利用core text對文本進行排版的幾個關鍵點如下: 字間距:kCTKernAttributeName

行間距:kCTParagraphStyleSpecifierLineSpacingAdjustment kCTParagraphStyleSpecifierLineSpacing(不推薦使用)

段間距:kCTParagraphStyleSpecifierParagraphSpacing

文本對齊方式:kCTParagraphStyleSpecifierAlignment;還有一點就是core text顯示出來的字是顛倒的,使用時要翻轉下: CGContextRef context = UIGraphicsGetCurrentContext();CGContextSetTextMatrix(context,CGAffineTransformIdentity);CGContextTranslateCTM(context,0,self.bounds.size.height);CGContextScaleCTM(context,1.0,-1.0);最后一點要注意的是Mac下的回車和Windows的是不一樣的,Windows下的回車是由r n組成的而Mac下只有一個n,所以如果沒有去掉的話在每一段的最后都會多出一個空行來,去掉的方法如下:

NSString *myString = [labelString stringByReplacingOccurrencesOfString “rn” withString “n”];具體的代碼實現如下: importimport importimport @interface TextLayoutLabel : UILabel { @private [size=1em] [color=white!important][size=1em]? long linesSpacing_;//行間距 } @property(nonatomic,assign)CGFloat characterSpacing;@propery(nonatomic,assign)long linesSpacing;@end import “TextLayoutLabel.h”import @implementation TextLayoutLabel @synthesize characterSpacing = characterSpacing_;@synthesize linesSpacing = linesSpacing_;-(id)initWithFrame CGRect)frame {//初始化字間距、行間距

if(self =[super initWithFrame:frame]){ self.characterSpacing = 2.0f;self.linesSpacing = 5.0f;}

或 return self;}-(void)setCharacterSpacing CGFloat)characterSpacing //外部調用設置字間距 { characterSpacing_ = characterSpacing;[self setNeedsDisplay];}-(void)setLinesSpacing long)linesSpacing //外部調用設置行間距 { linesSpacing_ = linesSpacing;[self setNeedsDisplay];}-(void)drawTextInRect CGRect)requestedRect { //去掉空行

NSString *labelString = self.text;NSString *myString = [labelString stringByReplacingOccurrencesOfString “rn” withString:“n”];//創建AttributeString NSMutableAttributedString *string =[[NSMutableAttributedString alloc]initWithString:self.text];//設置字體及大小 CTFontRef helveticaBold = CTFontCreateWithName((CFStringRef)self.font.fontName,self.font.pointSize,NULL);[string addAttribute id)kCTFontAttributeName value id)helveticaBold range:NSMakeRange(0,[string length])];//設置字間距

if(self.characterSpacing){ long number = self.characterSpacing;CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);[string addAttribute id)kCTkernAttributeName value id)num rang:NSMakeRange(0,[string length])];CFRelease(num);} //設置字體顏色

[string addAttribute id)kCTForegroundColorAttributeName value id)(self.textColor.CGColor)range:NSMakeRange(0,[string length])];//創建文本對齊方式

CTTextAlignment alignment = kCTLeftTextAlignment;if(self.textAlignment == UITextAlignmentCenter){ alignment = kCTCenterTextAlignment;} if(self.textAlignment == UITextAlignmentRight){ alignment = kCTRightTextAlignment;} CTParagraphStyleSetting alignmentStyle;alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;alignmentStyle.valueSize = sizeof(alignment);alignmentStyle.value = &alignment;//設置文本行間距

CGFloat lineSpace = self.linesSpacing;CTParagraphStyleSetting lineSpaceStyle;lineSpaceStyle.spec = kCTparagraphStyleSpecifierLineSpacingAdjustment;lineSpaceStyle.valueSize = sizeof(lineSpace);lineSpaceStyle.value =&lineSpace;//設置文本段間距

CGFloat paragraphSpacing = 5.0;CTparagraphStyleSetting paragraphSpaceStyle;paragraphSpaceStyle.spec = kCTparagraphStyleSpecifierParagraphSpacing;paragraphSpaceStyle.valueSize = sizeof(CGFloat);paragraphSpaceStyle.value = ?graphSpacing;//創建設置數組

CTParagraphStyleSetting settings[ ] ={alignmentStyle,lineSpaceStyle,paragraphSpaceStyle};CTParagraphStyleRef style = CTParagraphStyleCreate(settings ,3);//給文本添加設置

[string addAttribute:(id)kCTParagraphStyleAttributeName value:(id)style range:NSMakeRange(0 , [string length])];//排版

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);CGMutablePathRef leftColumnPath = CGPathCreateMutable();CGPathAddRect(leftColumnPath, NULL ,CGRectMake(0 , 0 ,self.bounds.size.width , self.bounds.size.height));CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0, 0), leftColumnPath , NULL);//翻轉坐標系統(文本原來是倒的要翻轉下)

CGContextRef context = UIGraphicsGetCurrentContext();CGContextSetTextMatrix(context , CGAffineTransformIdentity);CGContextTranslateCTM(context , 0 ,self.bounds.size.height);CGContextScaleCTM(context, 1.0 ,-1.0);//畫出文本

CTFrameDraw(leftFrame,context);//釋放

CGPathRelease(leftColumnPath);CFReleale(framesetter);CFRelease(helveticaBold);[string release];UIGraphicsPushContext(context);}

第二篇:好程序員學習筆記-Java網絡

1、網絡基礎知識

2、JAVA網絡編程網絡與分布式集群系統的區別:每個節點都是一臺計算機,而不是各種計算機內部的功能設備。Ip:具有全球唯一性,相對于internet,IP為邏輯地址。端口(port):一臺PC中可以有65536個端口,進程通過端口交換數據。連線的時候需要輸入IP也需要輸入端口信息。計算機通信實際上的主機之間的進程通信,進程的通信就需要在端口進行聯系。192.168.0.23:21協議:為了進行網絡中的數據交換(通信)而建立的規則、標準或約定。不同層的協議是不同的。網絡層:尋址、路由(指如何到達地址的過程)傳輸層:端口連接TCP模型:應用層/傳輸層/網絡層/網絡接口端口是一種抽象的軟件結構,與協議相關:TCP23端口和UDT23端口為兩個不同的概念。端口應該用1024以上的端口,以下的端口都已經設定功能。套接字(socket)的引入:

Ip+Port=Socket(這是個對象的概念。)Socket為傳輸層概念,而JSP是對應用層編程。例: java.net.*;(Server端定義順序)ServerSocket(intport)Socket.accept();//阻塞方法,當客戶端發出請求是就恢復 如果客戶端收到請求: 則Socket SI=ss.accept();注意客戶端和服務器的Socket為兩個不同的socket。Socket的兩個方法:getInputStream():客戶端用getOutputStream()服務器端用使用完畢后切記Socket.close(),兩個Socket都關,而且不用關內部的流。在client

端,Socket s=new Socket(“127.0.0.1”,8000);127.0.0.1為一個默認本機的地址。

練習:

1、客戶端向服務器發出一個字符串,服務器轉換成大寫傳回客戶端。大寫的函數:String.toUpperCase()

2、服務器告訴客戶端:“自開機以來你是第n 個用戶”。12.12UDP編程:DatagramSocket(郵遞員):對應數據報的Socket概念,不需要創建兩個socket,不可使用輸入輸出流。DatagramPacket(信件):數據包,是UDP下進行傳輸數據的單位,數據存放在字節數組中。UDP也需要現有Server端,然后再有Client端。兩端都是DatagramPacket(相當于電話的概念),需要NEW兩個DatagramPacket。InetAddress:網址這種信息傳輸方式相當于傳真,信息打包,在接受端準備紙。模式:發送端:Server:DatagramPacketinDataPacket=new DatagramPacket((msg,msg.length);InetAdress.getByName(ip),port);接收端:clientAddress=inDataPack.getAddress();//取得地址 clientPort=inDataPack.getPort();//

datagramSocket.send;//Server

datagramSocket.accept;//Client URL:

在應用層的編程 注意比較:

http://Localhost:8080/directory//查找網絡服務器的目錄 file://directory//查找本地的文件系統 java的開發主要以http為基礎。反射:主要用于工具和框架的開發。反射是對取得端口號

于類的再抽象;通過字符串來抽象類。JAVA類的運行:classLoader:加載到虛擬機(vm)Vm中只能存儲對象(動態運行時的概念),.class文件加載到VM上就成為一個對象,同時初始靜態成員及靜態代碼(只執行一次)。

Lang包下有一個類為Class:在反射中使用。此類中的每個對象為VM中的類對象,每個類都對應類類的一個對象(class.class)。例:對于一個Object類,用getClass()得到其類的對象,獲得類的對象就相當于獲得類的信息,可以調用其下的所有方法,包括類的私有方法。注意:在反射中沒有簡單數據類型,所有的編譯時類型都是對象。反射把編譯時應該解決的問題留到了運行時。

第三篇:【好程序員學習筆記】C語言 編譯預處理命令

文件包含:

把指定的文件插入到預處理命令行所在的位置并取代該命令行,即把指定的文件和當前的源程序文件連接成一個源文件。#include<文件名>

在文件包含目錄中去查找指定的文件,并將該文件添加到源文件中。一個被包含的文件中可以含有文件包含命令來包含另一個文件。#include“文件名”

命令中文件名的位置是當前源文件的位置,若在當前目錄中未找到該文件,則再到“包含目錄”中去查找。

用一個標識符表示一個字符串,稱為宏,被定義為宏的標識符稱為宏名。在編譯預處理時對程序中所有出現的宏名用宏定義中的字符串去代換,這就是宏替換。它是由系統編譯程序時自動完成的。

無參宏定義

#define 標識符 字符串 如

#define PI 3.14 使用宏時要注意:

(1)宏定義是用宏名來表示一個字符串,在宏展開時用字符串取代宏名。

2)宏定義不是變量定義或語句,在行末不能加分號,如果加上分號則分號也成為字符串的一部分。

(3)宏定義可以出現在程序的任何地方,其作用域是宏定義命令所在位置開始到源程序結束。如果要終止其作用域可使用#undef命令。

(4)宏定義允許嵌套,在宏定義的字符串中可以使用已經定義的宏名。在宏展開時將逐層替換。

(5)#define PI 3.1415926 #define AREA PI*y*y 有參宏定義

#define 宏名(形參表)字符串

對帶參數的宏,在調用中不僅要進行宏展開,而且還要用實參去替換形參。帶參宏調用的語法格式如下: 宏名(實參表); #define M(x)x+1 K=M(3);K=3+1 定義有參宏時要注意以下幾點:

(1)有參宏定義中,宏名和形參表之間不能有空格出現。

(2)在函數中,調用時要把實參的值賦給形參,進行“值傳遞”。而在帶參宏調用中,只是符號替換,不存在值傳遞問題。

(3)宏定義中的形參只能是標識符,而宏調用中的實參可以是表達式。

字符串內的形參通常用括號括起來以避免出錯。

在使用宏時不僅要將形式參數用括號括起來,還應將其整體用括號括起來。#define S(y)((y)*(y))條件編譯

條件編譯可以按不同的條件去編譯不同的程序段。1#ifdef #ifdef 標識符 程序段1 #else 程序段2 #endif 功能:如果標識符已被#define定義過,則對程序段1進行編譯,否則對程序段2進行編譯。格式中的#else部分可以沒有,即: #ifdef 標識符

程序段 #endif

2、#ifndef 語法格式如下: #ifndef 標識符 程序段1

#else 程序段2 #endif 功能與ifdef形式的功能正好相反。

3、#if 常量表達式 #if 常量表達式 程序段1 #else 程序段2 #endif 功能:如果常量表達式的值為真(非0),則對程序段1進行編譯,否則對程序段2進行編譯,因此可以使程序在不同條件下,完成不同的功能。

上面介紹的條件編譯實現的邏輯也可以用條件語句來實現,但是用條件語句將會對整個源程序進行編譯,生成的目標代碼程序較長,運行時間也較長,采用條件編譯則根據條件只編譯其中的程序段1或程序段2,生成的目標程序較短。

下載好程序員學習筆記-IOS 利用core text對文字進行排版word格式文檔
下載好程序員學習筆記-IOS 利用core text對文字進行排版.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    主站蜘蛛池模板: 性欧美videofree高清精品| 亚洲欧美日韩高清一区| 国产aⅴ精品一区二区三区久久| 国产做a爱片久久毛片a片| 97久久精品午夜一区二区| 国产熟女一区二区三区四区五区| 精品国产午夜理论片不卡| 无码免费h成年动漫在线观看| 人妻换着玩又刺激又爽| 成av免费大片黄在线观看| 国产欧美日韩一区二区加勒比| 麻豆av一区二区三区久久| 久久国产精品娇妻素人| 最新精品国偷自产在线| 狠狠躁夜夜躁人人躁婷婷视频| 亚洲日韩欧美国产高清αv| 国内精品久久久久久久久电影网| 国产情侣一区二区三区| 99久久无码一区人妻a片蜜| 亚洲另类激情综合偷自拍图| 亚洲爆乳无码专区| 人人妻久久人人澡人人爽人人精品| 亚洲欧美国产国产一区二区三区| 国内精品伊人久久久久网站| 亚洲欧美日韩愉拍自拍| 99精品国产一区二区| 国产成人人人97超碰超爽8| 欧美xxxx做受欧美| 亚洲欧洲成人av每日更新| 成人污视频| 小12国产萝裸体视频福利| 亚洲成av人片在线观看一区二区三区| 丝袜高跟麻麻浓精受孕人妻| 日韩av无码中文无码电影| 77777_亚洲午夜久久多人| 玩弄少妇肉体到高潮动态图| 亚洲狠狠婷婷综合久久久久| 无码国产色欲xxxxx视频| 蜜桃视频一区二区三区在线观看| 日本一道高清一区二区三区| 成人午夜福利视频后入|