欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      好程序員學(xué)習(xí)筆記-IOS 利用core text對文字進(jìn)行排版

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

      第一篇:好程序員學(xué)習(xí)筆記-IOS 利用core text對文字進(jìn)行排版

      core text 這個(gè)包默認(rèn)是沒有的,要自己手動(dòng)添加進(jìn)來。在IOS中利用core text對文本進(jìn)行排版的幾個(gè)關(guān)鍵點(diǎn)如下: 字間距:kCTKernAttributeName

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

      段間距:kCTParagraphStyleSpecifierParagraphSpacing

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

      NSString *myString = [labelString stringByReplacingOccurrencesOfString “rn” withString “n”];具體的代碼實(shí)現(xià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 //外部調(diào)用設(shè)置字間距 { characterSpacing_ = characterSpacing;[self setNeedsDisplay];}-(void)setLinesSpacing long)linesSpacing //外部調(diào)用設(shè)置行間距 { linesSpacing_ = linesSpacing;[self setNeedsDisplay];}-(void)drawTextInRect CGRect)requestedRect { //去掉空行

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

      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);} //設(shè)置字體顏色

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

      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;//設(shè)置文本行間距

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

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

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

      [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);//翻轉(zhuǎn)坐標(biāo)系統(tǒng)(文本原來是倒的要翻轉(zhuǎn)下)

      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);}

      第二篇:好程序員學(xué)習(xí)筆記-Java網(wǎng)絡(luò)

      1、網(wǎng)絡(luò)基礎(chǔ)知識

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

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

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

      練習(xí):

      1、客戶端向服務(wù)器發(fā)出一個(gè)字符串,服務(wù)器轉(zhuǎn)換成大寫傳回客戶端。大寫的函數(shù):String.toUpperCase()

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

      datagramSocket.send;//Server

      datagramSocket.accept;//Client URL:

      在應(yīng)用層的編程 注意比較:

      http://Localhost:8080/directory//查找網(wǎng)絡(luò)服務(wù)器的目錄 file://directory//查找本地的文件系統(tǒng) java的開發(fā)主要以http為基礎(chǔ)。反射:主要用于工具和框架的開發(fā)。反射是對取得端口號

      于類的再抽象;通過字符串來抽象類。JAVA類的運(yùn)行:classLoader:加載到虛擬機(jī)(vm)Vm中只能存儲對象(動(dòng)態(tài)運(yùn)行時(shí)的概念),.class文件加載到VM上就成為一個(gè)對象,同時(shí)初始靜態(tài)成員及靜態(tài)代碼(只執(zhí)行一次)。

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

      第三篇:【好程序員學(xué)習(xí)筆記】C語言 編譯預(yù)處理命令

      文件包含:

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

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

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

      用一個(gè)標(biāo)識符表示一個(gè)字符串,稱為宏,被定義為宏的標(biāo)識符稱為宏名。在編譯預(yù)處理時(shí)對程序中所有出現(xiàn)的宏名用宏定義中的字符串去代換,這就是宏替換。它是由系統(tǒng)編譯程序時(shí)自動(dòng)完成的。

      無參宏定義

      #define 標(biāo)識符 字符串 如

      #define PI 3.14 使用宏時(shí)要注意:

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

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

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

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

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

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

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

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

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

      (3)宏定義中的形參只能是標(biāo)識符,而宏調(diào)用中的實(shí)參可以是表達(dá)式。

      字符串內(nèi)的形參通常用括號括起來以避免出錯(cuò)。

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

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

      程序段 #endif

      2、#ifndef 語法格式如下: #ifndef 標(biāo)識符 程序段1

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

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

      上面介紹的條件編譯實(shí)現(xiàn)的邏輯也可以用條件語句來實(shí)現(xiàn),但是用條件語句將會對整個(gè)源程序進(jìn)行編譯,生成的目標(biāo)代碼程序較長,運(yùn)行時(shí)間也較長,采用條件編譯則根據(jù)條件只編譯其中的程序段1或程序段2,生成的目標(biāo)程序較短。

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

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦