一周隨筆--15.10.19,隨筆--15.10.19

來源:互聯網
上載者:User

一周隨筆--15.10.19,隨筆--15.10.19
一周新知識點記錄(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),文本高度就是行高*行數

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.