標籤:
今天學習了UI部分的內容,有點多,好好整理下。
首先是UIWindow。
直接執行個體化UIView:UIView *view = [[UIView alloc] init];
然後對其進行大小設定:view.frame = CGRectMake(10,30,355,627);學過HTML或者介面方面的都瞭解這個Rect,顧名思義就是一個矩形Rect(x,y,width,height)。x表示矩形的橫座標,y表示矩形的縱座標,width表示矩形的寬,height表示矩形的高,有了這四個參數,我們就能在iPhone上確定一塊視窗了。我們在生活中座標軸一般是左下角開始,向右x軸遞增,向上y軸遞增,而電腦螢幕是從左上方開始計算的,即向右x軸遞增,向下y軸遞增。在這裡這塊矩形的大小,在iPhone6上距離螢幕邊緣四周10px,至於y軸方向為什麼位移30px,是因為iOS的通知欄佔了20px,並且通知欄的優先順序非常高。
現在我們在模擬器上還是看不到任何東西,是因為我們只執行個體化了這個視窗,還沒有設定它的顏色:view.backgroundColor = [UIColor yellowColor];
最後將這個視窗添加為整個表單的子類即可:[self.view addSubView:view];
接下來是一些需要記憶的屬性/參數:
frame
view.frame.origin.x - view距離螢幕x的位移,為10px
view.frame.origin.y - view距離螢幕y的位移,為30px
view.frame.size.width - view的寬
view.frame.size.height - view的高
bounds
(view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width, view.bounds.size.height)
bounds表示view邊框的大小,其x和y始終為0,width、height與frame的相等,在某種程度上frame可以代替bounds使用。
center
(view.center.x,view.center.y) - 螢幕中心點
擷取螢幕解析度UIScreen:
[[UIScreen mainScreen]bounds].size.width
[[UIScreen mainScreen]bounds].size.height
表單也有子父的概念,子視圖會被嵌套在父視圖中,類似於HTML裡的<div><div></div></div>,其中一個子視圖的父視圖只能有一個,子視圖可以有多個。視圖的層級關係具體總結為:1.在同一個父視圖中時,先加入的view會被覆蓋在下面;2.子視圖根據父視圖進行遮擋,如果父視圖層級低於其他同級視圖,那麼該父視圖的子視圖也會被遮擋。
首先是給一個視圖指定它的父視圖:UIView *superView = view.superView;
或者通過另一種方式為父視圖添加它的子視圖:[superView addSubView:view2];[superView addSubView:view3];
接著我們可以對該父視圖進行遍曆,這裡使用枚舉遍曆:
NSArray *subViewsArray = superView.subViews;
for(UIView *view in subViewsArray)
//TODO
另外可以給視圖設定標籤,這樣我們就可以通過標籤來尋找這個視圖,這個tag跟Unity裡的tag有點類似:view.tag = 1;根據tag擷取視圖:UIView *view = [superView viewWithTag:1];
交換視圖。
規則:1.交換兩個層的視圖時,必須填寫正確的層數;2.交換兩個層後,對應的子視圖的數組下標也會改變。
[superView exchangeSubViewAtIndex:0 withSubViewAtIndex:1];如果層級不存在,交換是無效的。
插入視圖到指定的層:
[superView insertSubView:view belowSubview:view2];
將一個視圖放入最高層/最底層
[superView bringSubViewToFront:view];
[superView sendSubViewToBack:view];
接下來是自適應的內容:
首先要設定准許視圖自適應:view.autoresizesSubViews = YES;
接著就可以設定自適應的方式:view.autoresizingMask = UIViewAutoresizingFlexibleWidth;這裡有幾個選項:UIViewAutoresizingFlexibleHeight不一一列舉,簡單來說就是左右上下寬高的自適應。
其次是UILabel。
label與view類似,首先執行個體化:UILabel *label = [[UILabel alloc] init];
設定大小:label.fram = CGRectMake(10,100,350,300);
設定顏色:label.backgroundColor = [UIColor blueColor];
設定內容:label.text = @"Hello iOS";
配置模式:label.textAlignment = NSTextAlignmentCenter;
文字顏色(兩種方式):1.label.textColor = [UIColor greenColor];其中有一個特殊的clearColor表示透明色
2.label.textColor = [UIColor colorWithRed:0.1 green:0.8 blue:0.2 alpha:1];即通過RPGA來設定顏色
字型設定:label.font = [UIFont systemFontOfSize:25];25是字型大小
label.font = [UIFont boldSystemFontOfSize:25];
label.font = [UIFont italicsSystemFontOfSize:25];
並且可以查看系統內所有的字型:
for(NSString *name in [UIFont familyNames])
NSLog(@"%@",name);
label.font = [UIFont fontWithName: @"Apple Color Emoji" size:25];
字型陰影:label.shadowColor = [UIColor redColor];
label.shadowOffset = CGSizeMake(5,5);
換行模式:label.lineBreakMode = NSLineBreakByCharWrapping;根據字元換行
label.numberOfLines = 10;設定顯示的行數
根據字串大小計算label大小:
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(355,1000) lineBreakMode]:NSLineBreakByCharWrapping];
最後是UIImage。
這裡使用讀取本地圖片的方式載入圖片。
首先需要設定圖片的路徑,因為圖片放在了本工程的目錄下,所以我們需要先擷取這個工程的路徑:NSString *path = [[NSBundle mainBundle] resourcePath];
然後設定圖片路徑:NSString *imagePath = [NSString stringWithFormat:@"%@/bg.png",path];
根據路徑讀取圖片:UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
在讀取了圖片後還不能顯示,需要通過一個載體來載入圖片,所以需要執行個體化一個圖片對象:UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
最後設定一下大小,同時也能設定背景色:imageView.frame = CGRectMake(10,100,300,300);
imageView.backgroundColor = [UIColor yellowColor];
內容格式:imageView.contentMode = UIViewContentModeScaleToFill;//展開充滿整個載體
imageView.contentMode = UIViewContentModeScaleAspectFill;//展開不改變比例,充滿較長的一邊
imageView.contentMode = UIViewContentModeScaleAspectFit;//展開不改變比例,充滿較短的一邊
播放序列幀動畫:
幀動畫是2D遊戲裡常見的一種遊戲動畫形式,原理就是我們小時候看到過的翻頁動畫,通過不斷的替換顯示的圖片,造成視覺上的動態效果。首先準備好一組幀動畫的圖片,張數為count,命名為"png$.png"匯入到工程目錄下。
接著用一個數組來儲存這些圖片:NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for(int i = 1;i <= count;i++)
{
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"png%d.png",i]];
[imageArray addObject:image];
}
然後通過一個圖片載體來播放:UIImageView *imageView = [[UIImageView alloc] init];
設定大小:imageView.frame = CGRectMake(10,10,300,300);
添加到父視圖中:[self.view addSubView:imageView];
同樣可以設定背景顏色:imageView.backgroundColor = [UIColor yelloColor];
接下來是比較重要的設定:1.指定要播放的序列動畫圖片:imageView.animationImages = imageArray;
2.設定播放的時間長度:imageView.animationDuration = 3;
3.設定播放的次數:imageView.animationRepeatCount = 5;
【Objective-C學習記錄】第六天