2017年05月15日星期一
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
我的學習源碼:https://github.com/zccodere/s...php
什麼是MVCcss
Model View Controller MVC是一種設計模式 MVC不只是設計模式,更是高於框架和設計模式的 MVC是一種思想
MVC優勢html
低耦合性 高重用性 低開發成本 高可維護性
UIWindow1前端
咱們的手機界面 UIWindow實例化 UIWindow的級別
window的做用html5
做爲一個大容器,包含不少子view 能夠轉遞觸摸消息到控件
代碼演示:ios
// 實例化window _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 給window設置背景顏色 _window.backgroundColor = [UIColor redColor]; // 指定viewcontroller _window.rootViewController = [[UIViewController alloc] init]; // 成爲主window [_window makeKeyAndVisible];
UIViewcss3
UI的基類,基礎 UIVew的屬性 UIView的方法 UIView的自適應
代碼演示:git
// 建立視圖 UIView *view1 = [[UIView alloc] init]; // 設置邊框-位置大小 view1.frame = CGRectMake(10, 30, 394, 696); // 背景顏色 view1.backgroundColor = [UIColor redColor]; // 將視圖加入到父視圖中 [self.view addSubview:view1];
視圖frame屬性github
x:距左上角的水平距離 y:距左上角的垂直距離 width:寬度 height:高度
代碼演示:web
/* 機型 屏幕尺寸 分辨率 倍率 圖片分辨率 3GS 3.5寸 320*480 @1x 4/4s 3.5寸 320*480 @2x 640*960 5/5c/5s 4.0寸 320*568 @2x 640*1136 6 4.7寸 375*667 @2x 750*1334 6plus 5.5寸 414*736 @3x 1242*2208 */ // 3-2 // 獲取當前屏幕 int width = [[UIScreen mainScreen] bounds].size.width; int height = [[UIScreen mainScreen] bounds].size.height; NSLog(@"width:%d height:%d",width,height);
代碼演示:
// 狀態欄高度爲20px,咱們在設置控件frame時須要讓出20px。 NSLog(@"x:%f y:%f w:%f h:%f",view1.frame.origin.x,view1.frame.origin.y,view1.frame.size.width,view1.frame.size.height); // bounds 邊框大小,x和y永遠爲0 NSLog(@"x:%f y:%f w:%f h:%f",view1.bounds.origin.x,view1.bounds.origin.y,view1.bounds.size.width,view1.bounds.size.height); // center 中心點 NSLog(@"x:%f y:%f",view1.center.x,view1.center.y);
代碼演示:
// 父視圖 UIView *superView = view1.superview; superView.backgroundColor = [UIColor greenColor]; // 座標是根據父視圖的位置來設置的,不會垮層 UIView *view2 = [[UIView alloc] init]; view2.frame = CGRectMake(10, 100, 300, 30); view2.backgroundColor = [UIColor blackColor]; // 視圖惟一標識 view2.tag = 2; [view1 addSubview:view2]; UIView *view3 = [[UIView alloc] init]; view3.frame = CGRectMake(20, 50, 100, 100); view3.backgroundColor = [UIColor purpleColor]; // 視圖惟一標識 view3.tag = 3; [view1 addSubview:view3]; // 子視圖 // 方式一:獲取所有子視圖 NSArray *subViewArray = view1.subviews; for (UIView *viewTemp in subViewArray) { if(viewTemp.tag == 2){ viewTemp.backgroundColor = [UIColor whiteColor]; } } // 方式二:經過tag值獲取對應的子視圖 UIView *subView = [view1 viewWithTag:3]; subView.backgroundColor = [UIColor orangeColor];
層級的處理
1.同一個父視圖中先加入的View會被蓋在下面 2.子視圖是跟隨父視圖進行層級遮擋,若是父視圖低於其它同級視圖,則父視圖的子視圖也會被蓋住,可是子視圖和其它視圖的子視圖是沒有關係的 3.交換兩個層的視圖時須要注意必須填寫正確的層級數 4.當層交換了以後對應子視圖的數組下標也會進行改變
代碼演示:
// 層級的處理 /* 1.同一個父視圖中先加入的View會被蓋在下面 2.子視圖是跟隨父視圖進行層級遮擋,若是父視圖低於其它同級視圖,則父視圖的子視圖也會被蓋住,可是子視圖和其它視圖的子視圖是沒有關係的 3.交換兩個層的視圖時須要注意必須填寫正確的層級數 4.當層交換了以後對應子視圖的數組下標也會進行改變 */ UIView *view4 = [[UIView alloc] init]; view4.frame = CGRectMake(10, 100, 300, 300); view4.backgroundColor = [UIColor yellowColor]; //[self.view addSubview:view4]; // 交換兩個層的視圖 [view1 exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; // 插入一個視圖到指定層 UIView *view5 = [[UIView alloc] init]; view5.frame = CGRectMake(7, 80, 200, 200); view5.backgroundColor = [UIColor blackColor]; //[view1 insertSubview:view5 atIndex:2];//插入一個視圖到指定層 //[view1 insertSubview:view5 aboveSubview:view3];//插入一個視圖到指定視圖的上面 [view1 insertSubview:view5 belowSubview:view2];//插入一個視圖到指定視圖的下面 // 將一個View放入最頂層或者最底層 // 最頂層 [view1 bringSubviewToFront:view3]; // 最底層 [view1 sendSubviewToBack:view3];
代碼演示:
// 自適應 UIView *backView = [[UIView alloc] init]; backView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/2-25, 400, 50, 50); // 准許子視圖自適應 backView.autoresizesSubviews = YES; backView.tag = 1001; backView.backgroundColor = [UIColor orangeColor]; [self.view addSubview:backView]; UIView *topView = [[UIView alloc] init]; topView.frame = CGRectMake(10, 10, 30, 30); topView.backgroundColor = [UIColor greenColor]; // 設置子視圖的適應方式 topView.autoresizingMask = // UIViewAutoresizingFlexibleRightMargin | // UIViewAutoresizingFlexibleLeftMargin | // UIViewAutoresizingFlexibleTopMargin | // UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [backView addSubview:topView]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; btn.frame = CGRectMake(10, 550, 355, 30); btn.backgroundColor = [UIColor blackColor]; [btn addTarget:self action:@selector(bntClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn];
本章完整代碼:
// // ViewController.m // UIView // // Created by zc on 2017/5/15. // Copyright © 2017年 com.zccoder. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 3-1 // 建立視圖 UIView *view1 = [[UIView alloc] init]; // 設置邊框-位置大小 view1.frame = CGRectMake(10, 30, 394, 696); // 背景顏色 view1.backgroundColor = [UIColor redColor]; // 將視圖加入到父視圖中 [self.view addSubview:view1]; /* 機型 屏幕尺寸 分辨率 倍率 圖片分辨率 3GS 3.5寸 320*480 @1x 4/4s 3.5寸 320*480 @2x 640*960 5/5c/5s 4.0寸 320*568 @2x 640*1136 6 4.7寸 375*667 @2x 750*1334 6plus 5.5寸 414*736 @3x 1242*2208 */ // 3-2 // 獲取當前屏幕 int width = [[UIScreen mainScreen] bounds].size.width; int height = [[UIScreen mainScreen] bounds].size.height; NSLog(@"width:%d height:%d",width,height); // 3-3 // 狀態欄高度爲20px,咱們在設置控件frame時須要讓出20px。 NSLog(@"x:%f y:%f w:%f h:%f",view1.frame.origin.x,view1.frame.origin.y,view1.frame.size.width,view1.frame.size.height); // bounds 邊框大小,x和y永遠爲0 NSLog(@"x:%f y:%f w:%f h:%f",view1.bounds.origin.x,view1.bounds.origin.y,view1.bounds.size.width,view1.bounds.size.height); // center 中心點 NSLog(@"x:%f y:%f",view1.center.x,view1.center.y); // 3-4 // 父視圖 UIView *superView = view1.superview; superView.backgroundColor = [UIColor greenColor]; // 座標是根據父視圖的位置來設置的,不會垮層 UIView *view2 = [[UIView alloc] init]; view2.frame = CGRectMake(10, 100, 300, 30); view2.backgroundColor = [UIColor blackColor]; // 視圖惟一標識 view2.tag = 2; [view1 addSubview:view2]; UIView *view3 = [[UIView alloc] init]; view3.frame = CGRectMake(20, 50, 100, 100); view3.backgroundColor = [UIColor purpleColor]; // 視圖惟一標識 view3.tag = 3; [view1 addSubview:view3]; // 子視圖 // 方式一:獲取所有子視圖 NSArray *subViewArray = view1.subviews; for (UIView *viewTemp in subViewArray) { if(viewTemp.tag == 2){ viewTemp.backgroundColor = [UIColor whiteColor]; } } // 方式二:經過tag值獲取對應的子視圖 UIView *subView = [view1 viewWithTag:3]; subView.backgroundColor = [UIColor orangeColor]; //3-5 // 層級的處理 /* 1.同一個父視圖中先加入的View會被蓋在下面 2.子視圖是跟隨父視圖進行層級遮擋,若是父視圖低於其它同級視圖,則父視圖的子視圖也會被蓋住,可是子視圖和其它視圖的子視圖是沒有關係的 3.交換兩個層的視圖時須要注意必須填寫正確的層級數 4.當層交換了以後對應子視圖的數組下標也會進行改變 */ UIView *view4 = [[UIView alloc] init]; view4.frame = CGRectMake(10, 100, 300, 300); view4.backgroundColor = [UIColor yellowColor]; //[self.view addSubview:view4]; // 交換兩個層的視圖 [view1 exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; // 插入一個視圖到指定層 UIView *view5 = [[UIView alloc] init]; view5.frame = CGRectMake(7, 80, 200, 200); view5.backgroundColor = [UIColor blackColor]; //[view1 insertSubview:view5 atIndex:2];//插入一個視圖到指定層 //[view1 insertSubview:view5 aboveSubview:view3];//插入一個視圖到指定視圖的上面 [view1 insertSubview:view5 belowSubview:view2];//插入一個視圖到指定視圖的下面 // 將一個View放入最頂層或者最底層 // 最頂層 [view1 bringSubviewToFront:view3]; // 最底層 [view1 sendSubviewToBack:view3]; //3-6 // 自適應 UIView *backView = [[UIView alloc] init]; backView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/2-25, 400, 50, 50); // 准許子視圖自適應 backView.autoresizesSubviews = YES; backView.tag = 1001; backView.backgroundColor = [UIColor orangeColor]; [self.view addSubview:backView]; UIView *topView = [[UIView alloc] init]; topView.frame = CGRectMake(10, 10, 30, 30); topView.backgroundColor = [UIColor greenColor]; // 設置子視圖的適應方式 topView.autoresizingMask = // UIViewAutoresizingFlexibleRightMargin | // UIViewAutoresizingFlexibleLeftMargin | // UIViewAutoresizingFlexibleTopMargin | // UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [backView addSubview:topView]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; btn.frame = CGRectMake(10, 550, 355, 30); btn.backgroundColor = [UIColor blackColor]; [btn addTarget:self action:@selector(bntClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; } - (void)bntClick { UIView *view = [self.view viewWithTag:1001]; view.frame = CGRectMake(view.frame.origin.x-5, view.frame.origin.y-5, view.frame.size.width+10, view.frame.size.height+10); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
UILable
文本標籤 UIColor顏色類
代碼演示:
UILabel *lable = [[UILabel alloc] init]; lable.frame = CGRectMake(10, 100, 350, 300); lable.backgroundColor = [UIColor yellowColor]; // 文本 lable.text = @"網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你.網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你.網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你."; // 文字佈局模式 lable.textAlignment = NSTextAlignmentCenter; // 文字的顏色 //lable.textColor = [UIColor clearColor];//clearColor 透明色 lable.textColor = [UIColor colorWithRed:0.1 green:0.8 blue:0.2 alpha:1]; // alpha 透明度 //lable.alpha = 0.5;
多文字處理
1.Label要有足夠的大小 2.設置換行模式 3.設置顯示行數(0或-1不限制行數)
代碼演示:
// 字體的設置 lable.font = [UIFont systemFontOfSize:25]; // 加粗或傾斜 lable.font = [UIFont boldSystemFontOfSize:25]; lable.font = [UIFont italicSystemFontOfSize:25]; // 遍歷系統已安裝的字體 for(NSString *name in [UIFont familyNames]){ NSLog(@"fontName:%@",name); } // 設置字體和大小 lable.font = [UIFont fontWithName:@"Bodoni 72" size:20]; // 設置陰影 //lable.shadowColor = [UIColor redColor]; //lable.shadowOffset = CGSizeMake(-2, -2); // 處理多文字 // 1.Label要有足夠的大小 // 2.設置換行模式 lable.lineBreakMode = NSLineBreakByCharWrapping; // 3.設置顯示行數(0或-1不限制行數) lable.numberOfLines = 0;
代碼演示:
// 根據字符串大小計算Label的大小 CGSize size = [lable.text sizeWithFont:lable.font constrainedToSize:CGSizeMake(355, 10000) lineBreakMode:NSLineBreakByCharWrapping]; lable.frame = CGRectMake(lable.frame.origin.x, lable.frame.origin.y, lable.frame.size.width, size.height); [self.view addSubview:lable];
本章完整代碼:
// // ViewController.m // UILable // // Created by zc on 2017/5/15. // Copyright © 2017年 com.zccoder. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //self.view.backgroundColor = [UIColor redColor]; //4-1 UILabel *lable = [[UILabel alloc] init]; lable.frame = CGRectMake(10, 100, 350, 300); lable.backgroundColor = [UIColor yellowColor]; // 文本 lable.text = @"網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你.網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你.網提供了豐富的移動端開發、php開發、web前端、html5教程以及css3視頻教程等課程資源。它富有交互性及趣味性,而且你."; // 文字佈局模式 lable.textAlignment = NSTextAlignmentCenter; // 文字的顏色 //lable.textColor = [UIColor clearColor];//clearColor 透明色 lable.textColor = [UIColor colorWithRed:0.1 green:0.8 blue:0.2 alpha:1]; // alpha 透明度 //lable.alpha = 0.5; //4-2 // 字體的設置 lable.font = [UIFont systemFontOfSize:25]; // 加粗或傾斜 lable.font = [UIFont boldSystemFontOfSize:25]; lable.font = [UIFont italicSystemFontOfSize:25]; // 遍歷系統已安裝的字體 for(NSString *name in [UIFont familyNames]){ NSLog(@"fontName:%@",name); } // 設置字體和大小 lable.font = [UIFont fontWithName:@"Bodoni 72" size:20]; // 設置陰影 //lable.shadowColor = [UIColor redColor]; //lable.shadowOffset = CGSizeMake(-2, -2); // 處理多文字 // 1.Label要有足夠的大小 // 2.設置換行模式 lable.lineBreakMode = NSLineBreakByCharWrapping; // 3.設置顯示行數(0或-1不限制行數) lable.numberOfLines = 0; //4-3 // 根據字符串大小計算Label的大小 CGSize size = [lable.text sizeWithFont:lable.font constrainedToSize:CGSizeMake(355, 10000) lineBreakMode:NSLineBreakByCharWrapping]; lable.frame = CGRectMake(lable.frame.origin.x, lable.frame.origin.y, lable.frame.size.width, size.height); [self.view addSubview:lable]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
UIImage&UIImageView
UIImage UIImage載體 UIImageView
代碼演示:
// UIImage png jpg // 圖片資源路徑 NSString *path = [[NSBundle mainBundle] resourcePath]; NSString *imagePath = [NSString stringWithFormat:@"%@/1.jpg",path]; // 以路徑形式加載 每一次使用時加載該資源,效率低,但佔用內存少 UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath]; // 以名稱形式加載 第一次使用時加載進內存,效率高,但佔用內存多 //UIImage *image1 = [UIImage imageNamed:@"1.jpg"]; // 載體 UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; // 圖片顯示在屏幕上的大小是有載體控制 //imageView.frame = CGRectMake(0, 30, image.size.height, image.size.width); imageView.frame = CGRectMake(0, 20, 240, 320); [self.view addSubview:imageView];
代碼演示:
// 內容模式 //imageView.contentMode = UIViewContentModeCenter;//居中 //imageView.contentMode = UIViewContentModeScaleToFill;//拉伸-充滿整個載體 imageView.contentMode = UIViewContentModeScaleAspectFill;//拉伸-不改變比例,充滿最大的邊 //imageView.contentMode = UIViewContentModeScaleAspectFit;//拉伸-不改變比例,充滿最小的邊
代碼演示:
// UIImageView動畫 播放序列圖 NSMutableArray *imageArray = [[NSMutableArray alloc] init]; for(int i=1;i<=13;i++){ UIImage *imageTemp = [UIImage imageNamed:[NSString stringWithFormat:@"png%d.png",i]]; [imageArray addObject:imageTemp]; } UIImageView *imageView2 = [[UIImageView alloc] init]; imageView2.frame = CGRectMake((self.view.frame.size.width-407)/2, 100, 407, 217); // 設置動畫數組 imageView2.animationImages = imageArray; // 設置所有圖片播放週期時間(單位:秒) imageView2.animationDuration = 2; // 播放多少次 執行次數(0:不限制次數) imageView2.animationRepeatCount = 10; // 開始播放動畫 [imageView2 startAnimating]; // 中止播放動畫 //[imageView2 stopAnimating]; [self.view addSubview:imageView2];
本章完整代碼:
// // ViewController.m // UIImageView // // Created by zc on 2017/5/15. // Copyright © 2017年 com.zccoder. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. #if 0 // 5-1 // UIImage png jpg // 圖片資源路徑 NSString *path = [[NSBundle mainBundle] resourcePath]; NSString *imagePath = [NSString stringWithFormat:@"%@/1.jpg",path]; // 以路徑形式加載 每一次使用時加載該資源,效率低,但佔用內存少 UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath]; // 以名稱形式加載 第一次使用時加載進內存,效率高,但佔用內存多 //UIImage *image1 = [UIImage imageNamed:@"1.jpg"]; // 載體 UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; // 圖片顯示在屏幕上的大小是有載體控制 //imageView.frame = CGRectMake(0, 30, image.size.height, image.size.width); imageView.frame = CGRectMake(0, 20, 240, 320); [self.view addSubview:imageView]; // 5-2 // 內容模式 //imageView.contentMode = UIViewContentModeCenter;//居中 //imageView.contentMode = UIViewContentModeScaleToFill;//拉伸-充滿整個載體 imageView.contentMode = UIViewContentModeScaleAspectFill;//拉伸-不改變比例,充滿最大的邊 //imageView.contentMode = UIViewContentModeScaleAspectFit;//拉伸-不改變比例,充滿最小的邊 #endif // 5-3 // UIImageView動畫 播放序列圖 NSMutableArray *imageArray = [[NSMutableArray alloc] init]; for(int i=1;i<=13;i++){ UIImage *imageTemp = [UIImage imageNamed:[NSString stringWithFormat:@"png%d.png",i]]; [imageArray addObject:imageTemp]; } UIImageView *imageView2 = [[UIImageView alloc] init]; imageView2.frame = CGRectMake((self.view.frame.size.width-407)/2, 100, 407, 217); // 設置動畫數組 imageView2.animationImages = imageArray; // 設置所有圖片播放週期時間(單位:秒) imageView2.animationDuration = 2; // 播放多少次 執行次數(0:不限制次數) imageView2.animationRepeatCount = 10; // 開始播放動畫 [imageView2 startAnimating]; // 中止播放動畫 //[imageView2 stopAnimating]; [self.view addSubview:imageView2]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
總結
MVC UIWindow UIView UILable UIImage UIImageView
預告
UIButton UITextField UITextView UINavigationController UIViewController UISlider等