注:只要有學(xué)到新的知識(shí)由缆,會(huì)不斷更新
UIView的常見屬性
-
NSArray *subviews
- 這個(gè)屬性獲取的是所有子控件
- 返回的是一個(gè)數(shù)組矩欠,數(shù)組元素的順序決定著子控件的顯示層級(jí)的順序(下標(biāo)越大,越顯示在上面)
-
CGRect frame //是一個(gè)view在父控件中的位置和大小
- 里面有2個(gè)屬性幌羞,origin(位置寸谜,包含:x,y),size(尺寸:包含width,height)
- origin中的x,y是以父空間的左上角為原點(diǎn)
-
CGRect bounds //一個(gè)view的邊界
- 與frame的區(qū)別在于origin是(0,0),如果修改了后新翎,會(huì)影響到子控件的位置,
- bounds相當(dāng)于一個(gè)本地坐標(biāo)系統(tǒng)程帕,子控件的參考bounds的坐標(biāo)來定位
tintColor UIView新增加了一個(gè)tintColor屬性住练,這個(gè)屬性定義了一個(gè)非默認(rèn)的著色顏色值地啰,其值的設(shè)置會(huì)影響到以視圖為根視圖的整個(gè)視圖層次結(jié)構(gòu)。它主要是應(yīng)用到諸如app圖標(biāo)讲逛、導(dǎo)航欄亏吝、按鈕等一些控件上,以獲取一些有意思的視覺效果盏混。
-
CALayer 圖層
- 所有顯示的東西都要放到這個(gè)圖層上蔚鸥,uiview本身不具備顯示功能,是他內(nèi)部的layer才具有顯示功能许赃, 最主要止喷,可以添加動(dòng)畫
- CALayer是定義在QuartzCore框架中,而UIColor,UIImage是定義在UIKit框架中的,CGImageRef,CGColorRef是定義在CoreGraphics框架中的,
- QuartzCore和CoreGraphics是可以跨平臺(tái)使用的混聊,mac和ios都可以用弹谁,而UIKit只能用在IOS中,為了保證移植性.
- 通過操作CALayer對(duì)象句喜,可以很方便的調(diào)整uiview的一些外觀屬性,有主層预愤,和內(nèi)容層
- 陰影(shadowOpacity不透明度),圓角大小咳胃,邊框?qū)挾戎部担?/li>
- 顏色,圖層的顏色都是CG(C語音的東西)的展懈,需要通過[UIColor color].CGColor (類似貝瑟路徑轉(zhuǎn)CGPath)來轉(zhuǎn)換
- 邊框(border)销睁,圓角半徑(cornerRadiu)都是設(shè)置的是主層邊框,
- 形變 (transform),可以3D的進(jìn)行改變存崖,用CATransform對(duì)應(yīng)的函數(shù)
- position 是以父控件左上角為原點(diǎn)
- anchorPoint(錨點(diǎn)),這個(gè)點(diǎn)只有l(wèi)ayer有冻记,UIview是不同的。以自己本身左上角為原點(diǎn)金句,類似bounds檩赢。他的X,Y的取值范圍是0~1,默認(rèn)為(0.5,0.5)
- 這個(gè)點(diǎn)決定著layer身上哪個(gè)點(diǎn)會(huì)在position屬性所指的位置.旋轉(zhuǎn)的時(shí)候,繞著錨點(diǎn)旋轉(zhuǎn)贞瞒。
- 改變layer的frame會(huì)影響到uiview.frame偶房,兩者會(huì)保持一致
- 新建layer[CALayer layer],需要設(shè)置frame ,圖層只能添加到圖層上面,sublayer
- contents,內(nèi)容層如果設(shè)置圖片的話军浆,需要轉(zhuǎn)為CGimage. 如
layer.contents = (id)[UIImage imageNamed:@"阿貍頭像"].CGImage;
- contents,內(nèi)容層如果設(shè)置圖片的話军浆,需要轉(zhuǎn)為CGimage. 如
-
UIView與CALayer直接的選擇
- UIView是繼承于UIrespond可對(duì)事件處理棕洋,
- 如果只是為了顯示東西,用CALayer會(huì)比較高性能.
UIView的常見方法
-
addSubview
- 添加一個(gè)子控件到指定的父控件中
- 使用這個(gè)方法添加的子控件會(huì)放到subviews數(shù)組的最后
下面方法可以調(diào)整子控件的subview數(shù)組中的順序
//將子控件view插入到subviews數(shù)組的index位置
-(void) insertSubview:(UIView *) view atIndex:(NSInteger)index;
//將子控件view顯示到子控件某一個(gè)subview的下面
- (void)insertSubview:(UIView *)view
belowSubview:(UIView *)siblingSubview
//將子控件view顯示到子控件某一個(gè)subview的上面
- (void)insertSubview:(UIView *)view
aboveSubview:(UIView *)siblingSubview
UIView的動(dòng)畫方法
- 只有當(dāng)view有變化的時(shí)候會(huì)觸發(fā)
[UIView animateWithDuration:2.0 animations:^{
self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x,0);
}];
將會(huì)觸發(fā)動(dòng)畫的代碼放心這個(gè)block里面
注意點(diǎn)
不能給成員變量任何一個(gè)view命名 loadView 否則會(huì)只剩下一個(gè)窗口
-
轉(zhuǎn)換坐標(biāo)系的時(shí)候乒融,要分清楚需要轉(zhuǎn)換的空間的坐標(biāo)在哪個(gè)父控件中掰盘,然后轉(zhuǎn)到目標(biāo)坐標(biāo)系中。
- 比如 btn在lockView要轉(zhuǎn)到self中赞季,
//轉(zhuǎn)換坐標(biāo)愧捕,將在lockView的中心點(diǎn),轉(zhuǎn)換到self中, CGPoint btnCenter = [self.lockView convertPoint:btn.center toView:self];