UIView Class Reference??

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載习寸。

1.簡單的創(chuàng)建一個(gè)UIView.

CGRect viewRect = CGRectMake(10, 10, 100, 100);  
UIView* myView = [[UIView alloc] initWithFrame:viewRect]; ```

>2.當(dāng)創(chuàng)建一個(gè)view 之后胶惰,給其屬性autoresizingMask設(shè)置一個(gè)恰當(dāng)?shù)闹凳呛苤匾模藢傩阅軌虼_保view 正確的調(diào)整自己的大小霞溪。view resizing主要發(fā)生在應(yīng)用程序的界面方向發(fā)生變化孵滞,也可能其他的原因,例如setNeedsLayout方法的調(diào)用將強(qiáng)迫view去更新自己的layout威鹿。

>3.當(dāng)view第一次顯示剃斧,或者由于layout的改變view的部分或者全部變的可見時(shí)轨香,系統(tǒng)會(huì)要求view去draw (繪制)自己的內(nèi)容忽你。對于一般的view(沒有使用OpenGL ES),系統(tǒng)調(diào)用view的 drawRect:方法。我們實(shí)現(xiàn)此方法時(shí)有責(zé)任在當(dāng)前圖形的上細(xì)紋中繪制view的內(nèi)容臂容。此方法系統(tǒng)自動(dòng)的調(diào)用科雳,我們不能自己調(diào)用。
當(dāng)view的實(shí)際內(nèi)容發(fā)生改變時(shí)脓杉,我們有責(zé)任通知系統(tǒng)去重新繪制糟秘。我們應(yīng)該調(diào)用view的setNeedsDisplay或者setNeedsDisplayInRect:方法,此方法讓系統(tǒng)知道在下一個(gè)drawing cycle 更新view球散。

>4.view中下列屬性的改變可以用一個(gè)動(dòng)畫來過度尿赚。` frame,bounds蕉堰,center凌净,transform,alpha屋讶,backgroundColor冰寻,contentStretch`。

>5.用戶界面的操作必須在主線程中皿渗。

>6.雖然有很多好的理由讓我們?nèi)憊iew的子類斩芭,我們推薦僅當(dāng)基本的view不能提供所需的功能時(shí)轻腺,在去寫子類,因?yàn)樽宇惖膶?shí)現(xiàn)需要去做更多的工作划乖,并去調(diào)增其性能贬养。
當(dāng)我們?nèi)慤IView的子類時(shí),應(yīng)該去重寫一些方法迁筛。
初始化:
`
initWithFrame——推薦去實(shí)現(xiàn)此方法煤蚌,除了它,我們也可以實(shí)現(xiàn)一些其他的自定義初始化方法细卧。
initWithCoder——當(dāng)從IB nib file中l(wèi)oad view并且需要自定義初始化時(shí)尉桩,實(shí)現(xiàn)此方法。
Drawing and printing:
drawRect——實(shí)現(xiàn)此方法贪庙,當(dāng)view 繪制自定義內(nèi)容蜘犁。如果view沒有任何的自定義繪制,避免重寫此方法止邮。
Layout:
sizeThatFits——如果想要view有不同的缺省的size(在resizing 操作時(shí))这橙,應(yīng)該實(shí)現(xiàn)此方法。
layoutSubviews——如果需要更精確的控制subviews的布局而不是依靠提供的autoresizing行為导披,實(shí)現(xiàn)此屈扎。
`


>在寫UIView子類時(shí),考慮下列屬性或者行為能不能提供相同的效果撩匕。
```swift
(1) 給屬性autoresizingMask設(shè)置值鹰晨。當(dāng)superview的frame發(fā)生改變時(shí),此屬性可以提供一個(gè)自動(dòng)的布局行為止毕。
(2)設(shè)置屬性contentMode的值模蜡。此屬性決定view content的布局行為。該屬性還影響到content怎么去縮放去適應(yīng)view扁凛,以及是否cache 或者redrawn忍疾。
(3)設(shè)置屬性contentStretch。
(4)設(shè)置屬性hidden或者alpha谨朝。
(5)設(shè)置backgroundColor屬性卤妒。
(6)添加subviews。除了用drawRect去繪制內(nèi)容字币,嵌入image或者label也可以则披。
(7)添加手勢。
(8)使用內(nèi)置的動(dòng)畫支持纬朝。
(9)使用一個(gè)image做為view 的背景收叶。```


#####下面是UIView方法的一些簡要說明:

>7.初始化view 對象
(1)`(id)initWithFrame:(CGRect)aRect`
初始化并返回一個(gè)新的收集的view 對象用具體的區(qū)域。如果用程序的方法創(chuàng)建一個(gè)view 對象共苛,此方法是UIView對象的designated initalizer方法判没。子類可以覆蓋此方法去進(jìn)行一些自定義的初始化但是在方法實(shí)現(xiàn)的開始處一定要調(diào)用super方法蜓萄。如果使用IB設(shè)計(jì)interface,則此方法不會(huì)調(diào)用澄峰,會(huì)從nib file中加載嫉沽。對象從nib file重新初始化會(huì)調(diào)用initWithCoder方法,此方法會(huì)修改view 的屬性使其與在nib file中存儲(chǔ)的屬性像匹配俏竞。

>8.配置view的表現(xiàn)
(1)backgroundColor(缺省是一個(gè)透明的背景顏色)绸硕, hidden,clipsToBounds不用再說了魂毁。
hidden設(shè)置成YES之后玻佩,view 也不在接收event,但是它仍然在superview的subviews列表中席楚。隱藏一個(gè)view會(huì)隱藏它的子views咬崔。如果view是當(dāng)前窗口的第一響應(yīng)者,則隱藏它會(huì)導(dǎo)致下一個(gè)view變成新的第一響應(yīng)者烦秩。

>(2)alpha:當(dāng)值為0.0時(shí)垮斯,view是完全透明的,當(dāng)值為1.0時(shí)只祠,view是完全不透明的兜蠕。此值只影響當(dāng)前view,不影響嵌入的子view抛寝。

>(3)opaque:一個(gè)boolean值確定view是否不透明熊杨。默認(rèn)是YES。如果一個(gè)view整個(gè)或者部分是透明的墩剖,但是此值設(shè)置為YES猴凹,結(jié)果將是不可預(yù)測的夷狰。應(yīng)該設(shè)置此值為NO如果view部分或者全部透明岭皂。

>(4)clearsContextBeforeDrawing:默認(rèn)為YES,在一些情況下設(shè)置成NO沼头,可以提高性能爷绘,再此就不再說了。

>(5)layerClass和layer跟Core Animation layer有關(guān)进倍。


>9.配置與事件相關(guān)的行為土至。
(1)execlusiveTouch:設(shè)置成YES能阻止觸摸事件的傳遞在同一個(gè)窗口中,默認(rèn)為NO猾昆。

>10.frame 陶因,center, bounds垂蜗,transform
(1)frame楷扬,相對于父視圖解幽。設(shè)置此值會(huì)改變center屬性的point和bounds屬性的size。
改變frame會(huì)自動(dòng)的去redisplay view烘苹,但不掉用drawRect:方法躲株;如果想讓frame改變的時(shí)候調(diào)用drawRect方法,則設(shè)置contentMode屬性為UIViewContentModeRedraw镣衡。
改變frame屬性的值可以動(dòng)畫霜定。如果transform屬性包含一個(gè) non-identity transform,則frame屬性的值是不確定的廊鸥,不應(yīng)該被修改望浩。在這種情況下,可以通過center屬性從新定義view的位置惰说,調(diào)整大小用bounds屬性曾雕。

>(2)bounds, center不再說了

>(3)transform (@property(nonatomic) CGAffineTransform transform)
具體指定transform助被,相對于bounds的center剖张。
缺省的transform是center屬性的值,或者anchorPoint屬性如果改變(不是很懂)

>10.配置調(diào)整大小的行為
(1)autoresizingMask
一個(gè)整數(shù)掩碼確定如何調(diào)整自己的大小當(dāng)superview的bounds發(fā)生改變時(shí)揩环。
當(dāng)一個(gè)view的bounds發(fā)生改變時(shí)搔弄,其會(huì)根據(jù)subviews各自的autoresizing mask去調(diào)整subviews的大小。缺省的值為UIViewAutoresizingNone丰滑,表示不應(yīng)該從新調(diào)整大小當(dāng)superview的bounds發(fā)生改變時(shí)顾犹。

>(2)autoresizesSubviews
一個(gè)boolean值指示當(dāng)其bounds改變時(shí),是否自動(dòng)的調(diào)整subviews的大小褒墨。缺省為YES炫刷。

>(3)contentMode:一個(gè)標(biāo)記決定當(dāng)bounds改變時(shí),怎么去布局它的內(nèi)容郁妈。
此屬性指示當(dāng)view bounds改變時(shí)浑玛,怎么調(diào)整view layer 緩存的bitmap(位圖)。此屬性經(jīng)常用來去實(shí)現(xiàn)調(diào)整大小的控制噩咪,通常與contentStretch屬性聯(lián)系在一起顾彰。

>(4)contentStretch(CGRect)
此矩形定義了一個(gè)view可拉伸和不可拉伸的區(qū)域。
可以使用此屬性去控制當(dāng)一個(gè)view大小調(diào)整時(shí)胃碾,view 的content怎么去拉伸去填充其邊界涨享。
此值必須在0.0到1.0范圍呢。缺省的為origin(0.0仆百,0.0)厕隧,size(1.0,1.0)。(不是很懂)

>(5)sizeThatFits:
詢問view去計(jì)算和返回最適合subviews的大小吁讨。
缺省是放回view bounds矩形的大小帖族。子類可以去覆蓋此方法。例如UISwitch對象返回一個(gè)固定大小的size去展示一個(gè)標(biāo)準(zhǔn)大小的switch view挡爵。UIImageView對象返回的大小和當(dāng)前顯示的image大小相同竖般。

>(6)sizeToFit:
調(diào)整并移動(dòng)view的大小使其剛好包含子視圖。
不要去覆蓋此方法茶鹃,如果想改變涣雕,覆蓋sizeTahtFits:方法。


>11.lay out subviews
(1)- (void)layoutSubviews
此方法的缺省實(shí)現(xiàn)是空闭翩。子類可以去重寫此方法當(dāng)需要更精確的subviews布局挣郭。當(dāng)subviews的autoresizes行為不能滿足要求時(shí)才去重寫此方法×圃希可以在實(shí)現(xiàn)中直接設(shè)置subviews的frame兑障。
不能直接調(diào)用此方法。如果想要在下一個(gè)drawing周期去更新view 布局蕉汪,應(yīng)該調(diào)用setNeedsLayout方法流译,如果想立即更新view的布局,應(yīng)該調(diào)用layoutIfNeeded方法者疤。

>(2)- (void)setNeedsLayout
view的當(dāng)前布局失效福澡,
觸發(fā)view在下一個(gè)update更新周期去更新layout。 

>12.drawing 和updating view
(1)- (void)drawRect:(CGRect)rect
此方法的缺省實(shí)現(xiàn)什么都沒有驹马。子類使用原生的繪制技術(shù)(Core Graphics and UIKit)繪制內(nèi)容時(shí)應(yīng)該重寫此方法革砸,在方法里面寫出自己的drawing code。如果view設(shè)置自己的內(nèi)容用其他的方法糯累,則不需要去重寫此方法算利。舉例,如果view僅僅顯示一個(gè)背景顏色或者view用underlying layer對象去直接設(shè)置內(nèi)容時(shí)泳姐,不用去覆蓋此方法效拭。如果使用OpenGL ES也不應(yīng)該重寫此方法。
如果直接從UIView對象繼承仗岸,我們實(shí)現(xiàn)此方法不需要call super允耿。然而如果從其他的UIView對象繼承借笙,則應(yīng)該調(diào)用super扒怖。
當(dāng)view 第一次顯示或者當(dāng)view的可視的一部分無效時(shí),此方法會(huì)調(diào)用业稼。永遠(yuǎn)不要直接的調(diào)用此方法盗痒。調(diào)用setNeedsDisplay or setNeedsDisplayInRect: 方法會(huì)導(dǎo)致從新繪制。

>(2)- (void)setNeedsDisplay
調(diào)用此方法通知系統(tǒng)view 內(nèi)容需要重新繪制。view會(huì)在下一個(gè)drawing周期繪制俯邓。
如果你只是簡單的改變view的幾何形狀骡楼,view通常不會(huì)重新繪制。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稽鞭,一起剝皮案震驚了整個(gè)濱河市鸟整,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朦蕴,老刑警劉巖篮条,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吩抓,居然都是意外死亡涉茧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門疹娶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伴栓,“玉大人,你說我怎么就攤上這事雨饺∏澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵额港,是天一觀的道長扔枫。 經(jīng)常有香客問我,道長锹安,這世上最難降的妖魔是什么短荐? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮叹哭,結(jié)果婚禮上忍宋,老公的妹妹穿的比我還像新娘。我一直安慰自己风罩,他們只是感情好糠排,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著超升,像睡著了一般入宦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上室琢,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天乾闰,我揣著相機(jī)與錄音,去河邊找鬼盈滴。 笑死涯肩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播病苗,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疗垛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硫朦?” 一聲冷哼從身側(cè)響起贷腕,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咬展,沒想到半個(gè)月后花履,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挚赊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年诡壁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠割。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妹卿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔑鹦,到底是詐尸還是另有隱情夺克,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布嚎朽,位于F島的核電站铺纽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哟忍。R本人自食惡果不足惜狡门,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锅很。 院中可真熱鬧其馏,春花似錦、人聲如沸爆安。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔仓。三九已至褐奥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翘簇,已是汗流浹背撬码。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缘揪,地道東北人耍群。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓义桂,卻偏偏與公主長得像找筝,于是被迫代替她去往敵國和親蹈垢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容