国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

一周隨筆--15.10.19

2019-11-14 18:07:43
字體:
來源:轉載
供稿:網友

一周新知識點記錄(15.10.19)

一.ipad——UIPopoverController

UIPopoverController繼承自NSObject,因此不具備顯示能力,它是通過其中的內容控制器顯示的內容的。

 UIPopoverController使用四部曲:

一、創建UIPopoverController的內容控制器

二、根據內容控制器初始化UIPopoverController對象

三、設置UIPopoverController對象的尺寸

四、顯示UIPopoverController對象

 顯示UIPopoverController對象有兩種方法:

方法一:通過點擊UIBarButtonItem按鈕顯示

- (void)PResentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

參數說明:

item:觸發顯示的UIBarButtonItem對象

arrowDirections:顯示的箭頭方向

animated:是否展示過渡動畫

方法二:對特定區域顯示

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

參數說明:

rect:箭頭指向的區域

view:rect對應的視圖

arrowDirections:顯示箭頭的方向

animated:是否展示過渡動畫

注意:

1、UIPopoverController對象的尺寸不建議寫死,應當根據內容控制器的需要來。ios7以前對內容控制器(UIViewController)的contentSizeForViewInPopover設值,ios7以后對內容控制器的preferredContentSize設值。

2、UIPopoverController對象顯示出來的時候,默認任何其他控件都是不能交互的,點擊UIPopoverController對象區域意外的部分,對象dismiss。若想UIPopoverController對象顯示的時候能和某個控件交互,可以通過設置passthroughViews屬性實現。它是一個數組對象,將需要交互的控件打包成數組復制給它即可。


 二.二維碼生成

ios7以后系統提供了CoreImage框架中生成二維碼的濾鏡方法。由C語言支持的第三方庫libqrencode也是不錯的選擇。見Demo


 三.顯示模態窗口時的顯示方式及過渡方式

//顯示方式vc.modalPresentationStyle = UIModalPresentationFullScreen;//過渡方式vc.modalTransitionStyle = UIModalTransitionStylePartialCurl;

 對于iphone而言,只考慮過渡方式。

對于ipad而言,兩者都可考慮,顯示方式比較常用的是UIModalPresentationFormSheet(占據中間一小塊)


四.storyboard中巧用UITableView

可以直接在storyboard中設置tableView的頭視圖和尾視圖,拖出tableView到IB后,然后拖出視圖控件到tableView作為子視圖(tableView在IB中只允許有兩個子視圖,頭視圖和尾視圖,兩個視圖是連著的,頭在上尾在下)。只適用與storyboard,xib不適用,習慣用storyboard的話能夠大大提升開發效率。

另外可以直接在IB中對tableView設置代理和數據源。


 五.高度自適應options參數怎么設置

NSStringDrawingTruncatesLastVisibleLine

如果文本內容超出指定的矩形限制,文本將被截去并在最后一個字符后加上省略號。如果沒有指定NSStringDrawingUsesLineFragmentOrigin選項,則該選項被忽略。

NSStringDrawingUsesLineFragmentOrigin

繪制文本時使用 line fragement origin 而不是 baseline origin

NSStringDrawingUsesFontLeading

計算行高時使用行距。(譯者注:字體大小+行間距=行距)

NSStringDrawingUsesDeviceMetrics

計算布局時使用圖元字形(而不是印刷字體)。

測試發現:

只使用NSStringDrawingUsesLineFragmentOrigin時,以寬度約束為依賴,即使計算出的高度超過設定的約束高度,最終還是返回計算出的高度,也就是忽略高度的約束。

 使用NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine時,如果計算的高度超過約束的高度,最終返回的高度是可容納最大行數的文本對應高度,比如約束的高度容納得下2行,容不下3行,則返回的Size高度是2行對應的高度。

總結用法:

計算時options參數使用

NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading

另外計算單行文本也可以直接使用sizeWithAttributes


 六.導航控制器的topViewController & visibleViewController

topViewController代表當前navigation棧中最上層的VC,而visibleViewController代表當前可見的VC,它可能是topViewController,也可能是當前topViewController present出來的VC。因此UINavigationController的這兩個屬性通常情況下是一樣,但也有可能不同。


七.自定義日歷的實現

日歷主界面通過collectionView搭建,難點在于獲取指定月的日歷結構,包括這個月開頭有幾天是上個月的,末尾有幾天是下個月的,將這些信息通過不同的字符標識保存到數組中,例如*表示上個月的date、#表示下個月的date,中間本月用1~天數標識,就能得到指定月的日歷結構。

獲取到這個存有指定月日歷結構的數組是關鍵,有了它界面的搭建就有依據了。具體見Demo

值得一提的是,每個星期的第一天是星期日。因此如果日歷7天為一行的話,默認最左邊是星期日。如果想改為從左到右是星期一~星期日的結構,只要設置日歷對象calendar的FirstWeekday屬性值為2即可,(默認為1,從星期日開始)。


 八.關于字符串的高度

一字符串,字體大小15,計算好了size,顯示成兩行,行間距設置成3,打印計算出的高度為38.79。

打印字體大小15的font對象的各個屬性以及查看

leading*2 = 35.790000

lineHeight*2 = 35.790000

capHeight*2 = 21.420000

xHeight*2 = 15.510000

ascender*2 = 28.560000

descender*2 = -7.230000

lineSpacing = 3.000000(事先設置) 

從數據可以看出:

1)計算出的高度是以兩行行高(lineHeight)和一行行間距(lineSpacing)組成的。

(2)ascender是文本基線到文本頂部的距離,descender是文本底部到基線的距離(是負的),行高(lineHeight = ascender - descender

3)xHeight和capHeight不重要,具體可以查網上的那張字形度量圖,但是那張圖個人認為有問題,與實際測試打印的數據不符。leading就是lineHeight。

另外經測試發現,對于設置了行間距了文本

一行文本計算高度結果 = 文本高度+行間距

兩行文本計算高度結果 = 文本高度*2+行間距

三行文本計算高度結果 = 文本高度*3+行間距*2

四行....

如果未設置行間距的文本(文本默認行間距就是0),文本高度就是行高*行數

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新源县| 阿勒泰市| 兴义市| 桦甸市| 昂仁县| 交城县| 吴堡县| 府谷县| 盘山县| 西昌市| 东城区| 甘泉县| 灵石县| 广东省| 弋阳县| 莆田市| 家居| 萝北县| 灵石县| 麦盖提县| 南投县| 德兴市| 台北市| 玛纳斯县| 梅河口市| 绍兴市| 阳山县| 遂宁市| 吉安市| 丹棱县| 遵义县| 云林县| 东港市| 巴南区| 泰兴市| 霸州市| 白城市| 四平市| 嵊泗县| 桃园市| 师宗县|