日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS UI-九宫格

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS UI-九宫格 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1 第一節課: 2 1.復習 3 2.運行App應用管理,簡單界面分析 4 3.一個應用為一個整體,直接創建一個appView然后計算frame 5 4.說明弊端,應該根據數據的個數來for循環創建 6 7 第二節課: 8 5.加載plist文件字典轉模型 9 6.分析計算frame 寬高固定,x,y動態去計算 10 6.1. 行號 row = i / columnCount 11 6.2 列號 col = i % columnCount 12 leftMargin = (屏幕的寬 - (appW * columnCount) - appColMagrin * (columnCount - 1)) * 0.5; 13 appX = leftMargin + (appW + appColMagrin) * col; 14 appY = topMargin + (appY + appRowMagrin) * row 15 16 第三節: 17 6.3創建appView內部三個字控件,iconView, nameLabel , downloadBtn 18 6.4 先創建設置背景色,計算frame添加到appView中 19 6.5 給子控件設置數據,設置label字體和文字對齊方法 20 注意點:給按鈕設置圖片或文字還有文字顏色時,要用set方法指定不同狀態的文字或圖片,不能直接訪問titleLabel去給按鈕設置文字 21 7.分析懶加載代碼中的問題封裝字典轉模型細節, 22 23 24 instancetype 是和id 25 1、相同點 26 都可以作為方法的返回類型 27 28 2、不同點 29 1> instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型的對象; 30 31 2> instancetype只能作為返回值,不能像id那樣作為參數,和聲明屬性 32 33 id是個萬能指針編譯時不確定真實類型,只有在運行時才知道真實的類型 34 instancetype在編譯時就可以確定真實類型,類型一般為所在類的對象類型 35 36 下午: 37 38 第一節課: 39 40 7.1 自定義構造方法,并提供一個類方法 41 7.2 自定義構造方法時的方法命名規范,注意點 42 7.3 代碼進一步優化,引出xib 43 8.xib和storyboard的區別及開發中如何去選擇 44 9.MVC概念的引入 45 9.1用xib去封裝appView,并創建一個繼承至UIView的類,和xib的類型關聯 46 9.2把xib中的控件連線到自定義類的.h中可以在外面直接訪問去給子控件設置數據 47 9.3.弊端,把模型變成屬性引入到自定義view類,當控制器為自定義view類的模型屬性賦值時會調用模型屬性的set方法,如果我們重寫了屬性得set方法就會調用我們重寫得set方法,在此方法中給appView中的子控件設置數據 48 49 第二節課: 50 10.添加下載按鈕點擊事件 51 10.1 點擊下載按鈕彈出提示標簽,并加入動畫 52 53 第三節課: 54 11.回顧用xib自定義view的步驟 55 1.創建一個xib文件,在xib文件中布局好子控件,并設置好對應控件的屬性 56 2.創建一個和xib文件相同的類,此類繼承至那個類,取決于xib文件中最頂層控件的類型, 57 3.指定xib文件的類型為我們自定義的類,然后把需要修改的控件拖線到所關聯類的.m文件中 58 4.自定義類,定義模型屬性,并重寫模型屬性的set方法,在此方法給子控件設置數據 59 5.在自定義類提供一個可供外部訪問的類方法,把加載xib創建appView的過程封裝到自定義類中 60 61 62 63 64 65 66 67 68 *********** UIViewAnimationOption(動畫選項,默認為勻速) ******** 69 常規動畫屬性設置(可以同時選擇多個進行設置) 70 71 UIViewAnimationOptionLayoutSubviews:動畫過程中保證子視圖跟隨運動。 72 73 UIViewAnimationOptionAllowUserInteraction:動畫過程中允許用戶交互。 74 75 UIViewAnimationOptionBeginFromCurrentState:所有視圖從當前狀態開始運行。 76 77 UIViewAnimationOptionRepeat:重復運行動畫。 78 79 UIViewAnimationOptionAutoreverse :動畫運行到結束點后仍然以動畫方式回到初始點。 80 81 UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套動畫時間設置。 82 83 UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套動畫速度設置。 84 85 UIViewAnimationOptionAllowAnimatedContent:動畫過程中重繪視圖(注意僅僅適用于轉場動畫)。 86 87 UIViewAnimationOptionShowHideTransitionViews:視圖切換時直接隱藏舊視圖、顯示新視圖,而不是將舊視圖從父視圖移除(僅僅適用于轉場動畫) 88 UIViewAnimationOptionOverrideInheritedOptions :不繼承父動畫設置或動畫類型。 89 90 2.動畫速度控制(可從其中選擇一個設置) 91 92 UIViewAnimationOptionCurveEaseInOut:動畫先緩慢,然后逐漸加速。 93 94 UIViewAnimationOptionCurveEaseIn :動畫逐漸變慢。 95 96 UIViewAnimationOptionCurveEaseOut:動畫逐漸加速。 97 98 UIViewAnimationOptionCurveLinear :動畫勻速執行,默認值。 99 100 3.轉場類型(僅適用于轉場動畫設置,可以從中選擇一個進行設置,基本動畫、關鍵幀動畫不需要設置) 101 102 UIViewAnimationOptionTransitionNone:沒有轉場動畫效果。 103 104 UIViewAnimationOptionTransitionFlipFromLeft :從左側翻轉效果。 105 106 UIViewAnimationOptionTransitionFlipFromRight:從右側翻轉效果。 107 108 UIViewAnimationOptionTransitionCurlUp:向后翻頁的動畫過渡效果。 109 110 UIViewAnimationOptionTransitionCurlDown :向前翻頁的動畫過渡效果。 111 112 UIViewAnimationOptionTransitionCrossDissolve:舊視圖溶解消失顯示下一個新視圖的效果。 113 114 UIViewAnimationOptionTransitionFlipFromTop :從上方翻轉效果。 115 116 UIViewAnimationOptionTransitionFlipFromBottom:從底部翻轉效果。

?

一、創建九宮格?

實現思路

(1)明確每一塊用得是什么view

(2)明確每個view之間的父子關系,每個視圖都只有一個父視圖,擁有很多的子視圖。

(3)可以先嘗試逐個的添加格子,最后考慮使用for循環,完成所有uiview的創建

(4)加載app數據,根據數據長度創建對應個數的格子

(5)添加格子內部的子控件

(6)給內部的子控件裝配數據

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 設置每行應用的個數int clumns = 3;// 獲取控制器所管理的view的寬度CGFloat viewWidth = self.view.frame.size.width;// 每個應用的寬和高CGFloat appW = 75;CGFloat appH = 90;CGFloat marginTop = 30;//第一行距頂部的距離CGFloat marginX = (viewWidth - appW*clumns)/(clumns+1);CGFloat marginY = marginX;//設每行之間的間距與marginX相等for (int i=0; i<9; i++) {//1.創建每個應用(UIView)UIView *appView = [[UIView alloc] init];//2.設置appView的屬性//2.1設置appView的背景色appView.backgroundColor = [UIColor orangeColor];//2.2設置appView的frame屬性//計算每個單元格的列索引int colIdx = i%clumns;//計算每個單元格的行索引int rowIdy = i/clumns;CGFloat appX = marginX+(appW+marginX)*colIdx;CGFloat appY = marginTop+(appH+marginY)*rowIdy;appView.frame = CGRectMake(appX, appY, appW, appH);//3.將appView加到self.view [self.view addSubview:appView];} }

?

二、向九宮格內加控件

1 #import "ViewController.h" 2 3 @interface ViewController () 4 /** 5 * 用來存放所有數據的數組 6 */ 7 @property (nonatomic, strong) NSArray *appes; 8 @end 9 10 @implementation ViewController 11 12 /** 13 * 控制器的view加載完成之后就會調用此方法 14 */ 15 - (void)viewDidLoad { 16 [super viewDidLoad]; 17 // 格子之間的間距 18 CGFloat margin = 20; 19 // 格子的寬 20 CGFloat appViewW = 100; 21 // 格子的高 22 CGFloat appViewH = 120; 23 // 一行中用三個格子 24 NSInteger column = 3; 25 // 最左邊的間距 = (控制器view的寬 - 一行中所有格子的寬 - 格子間的間距 * (一行中格子的個數 - 1)) * 0.5 26 CGFloat leftMargin = (self.view.bounds.size.width - appViewW * column - (column - 1) *margin) * 0.5; 27 CGFloat topMargin = leftMargin; 28 // 根據數據的個數來動畫創建每一個應用 29 for (NSInteger i = 0; i < self.appes.count; i++) { 30 31 // 0> 先取出每一個應該的數據 32 NSDictionary *dict = self.appes[i]; 33 34 // 1.創建appView 用來裝里面的子控件 35 UIView *appView = [[UIView alloc] init]; 36 // 2.設置背景色 37 // appView.backgroundColor = [UIColor blueColor]; 38 39 // 計算列號 40 NSInteger col = i % column; 41 // 計算行號 42 NSInteger row = i / column; 43 // 3.設置frame 44 // 計算appViewX = 左邊間距 + (appView寬 + 格子間距) *當前格子是在當前行中的第幾個 45 CGFloat appViewX = leftMargin + (appViewW + margin) * col; 46 // appViewY = 頂部間距 + (appViewH + margin) * 當前格子在當前列中是第幾個 47 CGFloat appViewY = topMargin + (appViewH + margin) * row; 48 49 appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH); 50 51 // 4.添加到控制器的view中 52 [self.view addSubview:appView]; 53 54 // 5.創建應用圖片 55 UIImageView *iconView = [[UIImageView alloc] init]; 56 // 設置背景色 57 // iconView.backgroundColor = [UIColor purpleColor]; 58 CGFloat iconW = 70; 59 CGFloat iconH = iconW; 60 CGFloat iconX = (appViewW - iconW) * 0.5; 61 CGFloat iconY = 0; 62 iconView.frame = CGRectMake(iconX, iconY, iconW, iconH); 63 [appView addSubview:iconView]; 64 65 // 設置應用圖片 66 iconView.image = [UIImage imageNamed:dict[@"icon"]]; 67 68 // 6.應用的名稱 69 UILabel *nameLabel = [[UILabel alloc] init]; 70 // 設置背景色 71 // nameLabel.backgroundColor = [UIColor yellowColor]; 72 CGFloat nameX = 0; 73 // CGFloat nameY = iconY + iconH; 74 CGFloat nameY = CGRectGetMaxY(iconView.frame); 75 CGFloat nameW = appViewW; 76 CGFloat nameH = 21; 77 // 設置frame 78 nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH); 79 // 把名稱標簽添加到父控件中 80 [appView addSubview:nameLabel]; 81 82 // 設置應用名稱 83 nameLabel.text = dict[@"name"]; 84 // 設置字體大小 85 nameLabel.font = [UIFont systemFontOfSize:13.0]; 86 // 設置文字居中 87 nameLabel.textAlignment = NSTextAlignmentCenter; 88 89 // 7.下載按鈕 90 UIButton *downloadBtn = [[UIButton alloc] init]; 91 // downloadBtn.backgroundColor = [UIColor redColor]; 92 CGFloat downloadX = iconX; 93 CGFloat downloadY = CGRectGetMaxY(nameLabel.frame); 94 CGFloat downlaodW = iconW; 95 CGFloat downlaodH = 30; 96 downloadBtn.frame = CGRectMake(downloadX, downloadY, downlaodW, downlaodH); 97 [appView addSubview:downloadBtn]; 98 99 // 設置按鈕背景圖片 100 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal]; 101 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateDisabled]; 102 // 設置按鈕的文字 103 [downloadBtn setTitle:@"下載" forState:UIControlStateNormal]; 104 [downloadBtn setTitle:@"已下載" forState:UIControlStateDisabled]; 105 106 downloadBtn.titleLabel.font = [UIFont systemFontOfSize:15]; 107 } 108 } 109 110 111 #pragma mark - 懶加載 112 - (NSArray *)appes { 113 // 1.判斷當前的數組屬性是否為空,如果為空的時候再去加載數據 114 if (_appes == nil) { 115 // 2.獲取plist文件路徑 116 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; 117 // 3.加載plist文件 118 NSArray *dictArr = [NSArray arrayWithContentsOfFile:path]; 119 _appes = dictArr; 120 121 } 122 123 return _appes; 124 125 } 126 127 @end

三、向九宮格內加數據

1 #import "ViewController.h" 2 3 @interface ViewController () 4 /** 5 * 用來存放所有數據的數組 6 */ 7 @property (nonatomic, strong) NSArray *appes; 8 @end 9 10 @implementation ViewController 11 12 /** 13 * 控制器的view加載完成之后就會調用此方法 14 */ 15 - (void)viewDidLoad { 16 [super viewDidLoad]; 17 // 格子之間的間距 18 CGFloat margin = 20; 19 // 格子的寬 20 CGFloat appViewW = 100; 21 // 格子的高 22 CGFloat appViewH = 120; 23 // 一行中用三個格子 24 NSInteger column = 3; 25 // 最左邊的間距 = (控制器view的寬 - 一行中所有格子的寬 - 格子間的間距 * (一行中格子的個數 - 1)) * 0.5 26 CGFloat leftMargin = (self.view.bounds.size.width - appViewW * column - (column - 1) *margin) * 0.5; 27 CGFloat topMargin = leftMargin; 28 // 根據數據的個數來動畫創建每一個應用 29 for (NSInteger i = 0; i < self.appes.count; i++) { 30 31 // 0> 先取出每一個應該的數據 32 NSDictionary *dict = self.appes[i]; 33 34 // 1.創建appView 用來裝里面的子控件 35 UIView *appView = [[UIView alloc] init]; 36 // 2.設置背景色 37 // appView.backgroundColor = [UIColor blueColor]; 38 39 // 計算列號 40 NSInteger col = i % column; 41 // 計算行號 42 NSInteger row = i / column; 43 // 3.設置frame 44 // 計算appViewX = 左邊間距 + (appView寬 + 格子間距) *當前格子是在當前行中的第幾個 45 CGFloat appViewX = leftMargin + (appViewW + margin) * col; 46 // appViewY = 頂部間距 + (appViewH + margin) * 當前格子在當前列中是第幾個 47 CGFloat appViewY = topMargin + (appViewH + margin) * row; 48 49 appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH); 50 51 // 4.添加到控制器的view中 52 [self.view addSubview:appView]; 53 54 // 5.創建應用圖片 55 UIImageView *iconView = [[UIImageView alloc] init]; 56 // 設置背景色 57 // iconView.backgroundColor = [UIColor purpleColor]; 58 CGFloat iconW = 70; 59 CGFloat iconH = iconW; 60 CGFloat iconX = (appViewW - iconW) * 0.5; 61 CGFloat iconY = 0; 62 iconView.frame = CGRectMake(iconX, iconY, iconW, iconH); 63 [appView addSubview:iconView]; 64 65 // 設置應用圖片 66 iconView.image = [UIImage imageNamed:dict[@"icon"]]; 67 68 // 6.應用的名稱 69 UILabel *nameLabel = [[UILabel alloc] init]; 70 // 設置背景色 71 // nameLabel.backgroundColor = [UIColor yellowColor]; 72 CGFloat nameX = 0; 73 // CGFloat nameY = iconY + iconH; 74 CGFloat nameY = CGRectGetMaxY(iconView.frame); 75 CGFloat nameW = appViewW; 76 CGFloat nameH = 21; 77 // 設置frame 78 nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH); 79 // 把名稱標簽添加到父控件中 80 [appView addSubview:nameLabel]; 81 82 // 設置應用名稱 83 nameLabel.text = dict[@"name"]; 84 // 設置字體大小 85 nameLabel.font = [UIFont systemFontOfSize:13.0]; 86 // 設置文字居中 87 nameLabel.textAlignment = NSTextAlignmentCenter; 88 89 // 7.下載按鈕 90 UIButton *downloadBtn = [[UIButton alloc] init]; 91 // downloadBtn.backgroundColor = [UIColor redColor]; 92 CGFloat downloadX = iconX; 93 CGFloat downloadY = CGRectGetMaxY(nameLabel.frame); 94 CGFloat downlaodW = iconW; 95 CGFloat downlaodH = 30; 96 downloadBtn.frame = CGRectMake(downloadX, downloadY, downlaodW, downlaodH); 97 [appView addSubview:downloadBtn]; 98 99 // 設置按鈕背景圖片 100 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal]; 101 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateDisabled]; 102 // 設置按鈕的文字 103 [downloadBtn setTitle:@"下載" forState:UIControlStateNormal]; 104 [downloadBtn setTitle:@"已下載" forState:UIControlStateDisabled]; 105 106 downloadBtn.titleLabel.font = [UIFont systemFontOfSize:15]; 107 } 108 } 109 110 111 #pragma mark - 懶加載 112 - (NSArray *)appes { 113 // 1.判斷當前的數組屬性是否為空,如果為空的時候再去加載數據 114 if (_appes == nil) { 115 // 2.獲取plist文件路徑 116 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; 117 // 3.加載plist文件 118 NSArray *dictArr = [NSArray arrayWithContentsOfFile:path]; 119 _appes = dictArr; 120 121 } 122 123 return _appes; 124 125 }

代碼問題

我們是直接通過字典的鍵名獲取plist中的數據信息,在viewController中需要直接和數據打交道,如果需要多次使用可能會因為不小心把鍵名寫錯,而程序并不報錯。鑒于此,可以考慮把字典數據轉換成一個模型,把數據封裝到一個模型中去,讓viewController不再直接和數據打交道,而是和模型交互。

一般情況下,設置數據和取出數據都使用“字符串類型的key”,編寫這些key時,編輯器沒有智能提示,需要手敲。如:

dict[@"name"] =?@"Jack";

NSString?*name = dict[@"name"];

手敲字符串key,key容易寫錯

Key如果寫錯了,編譯器不會有任何警告和報錯,造成設錯數據或者取錯數據

?

?

四、字典轉模型

字典轉模型的好處:

(1)降低代碼的耦合度

(2)所有字典轉模型部分的代碼統一集中在一處處理,降低代碼出錯的幾率

(3)在程序中直接使用模型的屬性操作,提高編碼效率?

(4)調用方不用關心模型內部的任何處理細節

字典轉模型的注意點:

模型應該提供一個可以傳入字典參數的構造方法

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)xxxWithDict:(NSDictionary *)dict;

提示:在模型中合理地使用只讀屬性,可以進一步降低代碼的耦合度。

#import <Foundation/Foundation.h> /** NSString block用copy除了字符串和 block 控件 其它基本OC對象都用strongweak 控件最好都用assgin 基本數據類型*/ @interface HMApp : NSObject /** 應用圖片 */ @property (nonatomic, copy) NSString *icon; /** 應用名稱 */ @property (nonatomic, copy) NSString *name;// id他instancetype有什么區別 // 1.相同點:他們都可以當方法的返回值 // 2.不同點:id可以來聲明變量,id可以當參數類型,\ // id是一個萬能指針,他在編譯的時候不會確定真實的類型,只有在運行時候才知道真實類型 // instancetype在編譯的時候就能確定他的返回值真實類型,這種更安全 //clang 3.5
/** */ - (instancetype)initWithDict:(NSDictionary *)dict;//用字典實例化對象的成員方法 + (instancetype)appWithDict:(NSDictionary *)dict;//用字典實例化對象的類方法,又稱工廠方法 @end#import "HMApp.h"@implementation HMApp - (instancetype)initWithDict:(NSDictionary *)dict {if (self = [super init]) {self.icon = dict[@"icon"];self.name = dict[@"name"];

? ? ? ??[self setValuesForKeysWithDictionary:dict];//加載所有屬性

}return self; }+ (instancetype)appWithDict:(NSDictionary *)dict {return [[self alloc] initWithDict:dict]; } @end/**xib和stroyboard的區別1.相同點:都可以用來我們軟件界面2.不同點:在storyboard可以用來搭建整個應用的所有界面,最少也是一個界面xib可以用來描述一個界面中的某一個部分,或一個應用的一個界面,及整個界面*/ #import "ViewController.h" #import "HMApp.h"@interface ViewController () /*** 用來存放所有數據的數組*/ @property (nonatomic, strong) NSArray *appes; @end@implementation ViewController/*** 控制器的view加載完成之后就會調用此方法*/ - (void)viewDidLoad {[super viewDidLoad];// 格子之間的間距CGFloat margin = 20;// 格子的寬CGFloat appViewW = 100;// 格子的高CGFloat appViewH = 120;// 一行中用三個格子NSInteger column = 3;// 最左邊的間距 = (控制器view的寬 - 一行中所有格子的寬 - 格子間的間距 * (一行中格子的個數 - 1)) * 0.5CGFloat leftMargin = (self.view.bounds.size.width - appViewW * column - (column - 1) *margin) * 0.5;CGFloat topMargin = leftMargin;// 根據數據的個數來動畫創建每一個應用for (NSInteger i = 0; i < self.appes.count; i++) {// 0> 先取出每一個應該的數據 // NSDictionary *dict = self.appes[i];// 取數組中每一個用來表示數據的模型對象HMApp *app = self.appes[i];// 1.創建appView 用來裝里面的子控件UIView *appView = [[UIView alloc] init];// 2.設置背景色 // appView.backgroundColor = [UIColor blueColor];// 計算列號NSInteger col = i % column;// 計算行號NSInteger row = i / column;// 3.設置frame// 計算appViewX = 左邊間距 + (appView寬 + 格子間距) *當前格子是在當前行中的第幾個CGFloat appViewX = leftMargin + (appViewW + margin) * col;// appViewY = 頂部間距 + (appViewH + margin) * 當前格子在當前列中是第幾個CGFloat appViewY = topMargin + (appViewH + margin) * row;appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH);// 4.添加到控制器的view中 [self.view addSubview:appView];// 5.創建應用圖片UIImageView *iconView = [[UIImageView alloc] init];// 設置背景色 // iconView.backgroundColor = [UIColor purpleColor];CGFloat iconW = 70;CGFloat iconH = iconW;CGFloat iconX = (appViewW - iconW) * 0.5;CGFloat iconY = 0;iconView.frame = CGRectMake(iconX, iconY, iconW, iconH);[appView addSubview:iconView];// 設置應用圖片iconView.image = [UIImage imageNamed:app.icon];// 6.應用的名稱UILabel *nameLabel = [[UILabel alloc] init];// 設置背景色 // nameLabel.backgroundColor = [UIColor yellowColor];CGFloat nameX = 0;// CGFloat nameY = iconY + iconH;CGFloat nameY = CGRectGetMaxY(iconView.frame);CGFloat nameW = appViewW;CGFloat nameH = 21;// 設置framenameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);// 把名稱標簽添加到父控件中 [appView addSubview:nameLabel];// 設置應用名稱nameLabel.text = app.name;// 設置字體大小nameLabel.font = [UIFont systemFontOfSize:13.0];// 設置文字居中nameLabel.textAlignment = NSTextAlignmentCenter;// 7.下載按鈕UIButton *downloadBtn = [[UIButton alloc] init]; // downloadBtn.backgroundColor = [UIColor redColor];CGFloat downloadX = iconX;CGFloat downloadY = CGRectGetMaxY(nameLabel.frame);CGFloat downlaodW = iconW;CGFloat downlaodH = 30;downloadBtn.frame = CGRectMake(downloadX, downloadY, downlaodW, downlaodH);[appView addSubview:downloadBtn];// 設置按鈕背景圖片[downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];[downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateDisabled];// 設置按鈕的文字[downloadBtn setTitle:@"下載" forState:UIControlStateNormal];[downloadBtn setTitle:@"已下載" forState:UIControlStateDisabled];downloadBtn.titleLabel.font = [UIFont systemFontOfSize:15];} }#pragma mark - 懶加載 - (NSArray *)appes {// 1.判斷當前的數組屬性是否為空,如果為空的時候再去加載數據if (_appes == nil) {// 2.獲取plist文件路徑NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];// 3.加載plist文件NSArray *dictArr = [NSArray arrayWithContentsOfFile:path];// 創建一個可變數據用來保存每一個模型對象(創建可變數組時并給其分配好容量)NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:dictArr.count];// 遍歷字典數組把每一個字典轉換成一個模型對象for (NSDictionary *dict in dictArr) {// 創建模型對象 // HMApp *app = [[HMApp alloc] initWithDict:dict];HMApp *app = [HMApp appWithDict:dict];// 給模型對象中的屬性賦值 // app.icon = dict[@"icon"]; // app.name = dict[@"name"];// 把模型添加到數組 [arrM addObject:app];}// 把裝有所有模型的數組賦值給我們的數組屬性_appes = arrM;}return _appes;} @end

?

?

五、用xib自定義view

HMAppView.xib文件

1 /*--------------------Model-------------------*/ 2 3 #import <Foundation/Foundation.h> 4 /** NSString block用copy 5 除了字符串和 block 控件 其它基本OC對象都用strong 6 weak 控件最好都用 7 assgin 基本數據類型 8 */ 9 @interface HMApp : NSObject 10 /** 應用圖片 */ 11 @property (nonatomic, copy) NSString *icon; 12 /** 應用名稱 */ 13 @property (nonatomic, copy) NSString *name; 14 15 // id他instancetype有什么區別 16 // 1.相同點:他們都可以當方法的返回值 17 // 2.不同點:id可以來聲明變量,id可以當參數類型,\ 18 // id是一個萬能指針,他在編譯的時候不會確定真實的類型,只有在運行時候才知道真實類型 19 // instancetype在編譯的時候就能確定他的返回值真實類型,這種更安全 20 //clang 3.5 21 - (instancetype)initWithDict:(NSDictionary *)dict; 22 + (instancetype)appWithDict:(NSDictionary *)dict; 23 @end 24 25 26 27 #import "HMApp.h" 28 29 @implementation HMApp 30 - (instancetype)initWithDict:(NSDictionary *)dict { 31 if (self = [super init]) { 32 self.icon = dict[@"icon"]; 33 self.name = dict[@"name"]; 34 } 35 36 return self; 37 } 38 39 + (instancetype)appWithDict:(NSDictionary *)dict { 40 return [[self alloc] initWithDict:dict]; 41 } 42 @end 43 44 /*-----------------View---------------------*/ 45 #import <UIKit/UIKit.h> 46 @class HMApp; 47 @interface HMAppView : UIView 48 // 把模型變成一個屬性引用到自定義視圖中 49 @property (nonatomic, strong) HMApp *app; 50 51 + (instancetype)appView; 52 @end 53 54 55 56 #import "HMAppView.h" 57 #import "HMApp.h" 58 59 @interface HMAppView () 60 /** 應用的圖片 */ 61 @property (weak, nonatomic) IBOutlet UIImageView *iconView; 62 /** 應用的名稱 */ 63 @property (weak, nonatomic) IBOutlet UILabel *nameLabel; 64 @end 65 66 @implementation HMAppView 67 // 當點擊下載按鈕之后調用的方法 68 - (IBAction)downloadBtnClick:(UIButton *)downBtn { 69 NSLog(@"%ld----%@", self.tag ,self); 70 // 1.把按鈕設置為禁用狀態 71 downBtn.enabled = NO; 72 // 2.創建一個label 73 UILabel *downLabel = [[UILabel alloc] init]; 74 downLabel.text = [NSString stringWithFormat:@"%@下載完成", self.app.name]; 75 // 設置字體 76 downLabel.font = [UIFont systemFontOfSize:13.0]; 77 // 設置文字居中 78 downLabel.textAlignment = NSTextAlignmentCenter; 79 // 設置label的文字顏色 80 downLabel.textColor = [UIColor redColor]; 81 // 設置背景色 82 downLabel.backgroundColor = [UIColor blackColor]; 83 // 設置bounds 84 downLabel.bounds = CGRectMake(0, 0, 200, 21); 85 // 設置標簽的位置在屏幕的中心 86 downLabel.center = self.superview.center; 87 // 把提示標簽添加在控制器的view上 88 [self.superview addSubview:downLabel]; 89 // 設置label透明度 90 downLabel.alpha = 0.0; 91 // 設置圓角半徑 92 downLabel.layer.cornerRadius = 5; 93 // 把超出邊界的部分裁剪掉 94 downLabel.clipsToBounds = YES; 95 // downLabel.layer.masksToBounds = YES; 96 97 //執行一個兩秒中的動畫,讓標簽慢慢的顯示 98 [UIView animateWithDuration:2.0 animations:^{ // 表示要執行的動畫代碼 99 // 設置label的透明度 100 downLabel.alpha = 0.7; 101 } completion:^(BOOL finished) { // 表示動畫執行完成之后要做得事情 102 // 上面的動畫執行完成之后推遲2秒之后執行一個2秒的一個動畫 103 [UIView animateWithDuration:2.0 delay:2.0 options:UIViewAnimationOptionCurveLinear animations:^{ 104 // 設置label透明度 105 downLabel.alpha = 0.0; 106 } completion:^(BOOL finished) { // 動畫執行完成之后把label從父控件中移除 107 // 把這個label從它的父控件中移除掉 108 [downLabel removeFromSuperview]; 109 }]; 110 }]; 111 } 112 113 114 + (instancetype)appView { 115 return [[[NSBundle mainBundle] loadNibNamed:@"HMAppView" owner:nil options:nil]lastObject]; 116 } 117 // 重寫模型屬性的set方法,當外部給自定義視圖的模型屬性賦值時就會調用此方法, 118 - (void)setApp:(HMApp *)app { 119 #warning mark - 重寫set方法一定要注意給屬性下劃線的成員變量賦值 120 _app = app; 121 // 1.設置應用圖片 122 self.iconView.image = [UIImage imageNamed:app.icon]; 123 // 2.設置應用名稱 124 self.nameLabel.text = app.name; 125 126 127 } 128 129 130 @end 131 132 /*-------------------Controller--------------*/ 133 /** 134 xib和stroyboard的區別 135 1.相同點:都可以用來我們軟件界面 136 2.不同點:在storyboard可以用來搭建整個應用的所有界面,最少也是一個界面 137 xib可以用來描述一個界面中的某一個部分,或一個應用的一個界面,及整個界面 138 */ 139 #import "ViewController.h" 140 #import "HMApp.h" 141 #import "HMAppView.h" 142 143 @interface ViewController () 144 /** 145 * 用來存放所有數據的數組 146 */ 147 @property (nonatomic, strong) NSArray *appes; 148 @end 149 150 @implementation ViewController 151 152 /** 153 * 控制器的view加載完成之后就會調用此方法 154 */ 155 - (void)viewDidLoad { 156 [super viewDidLoad]; 157 // 格子之間的間距 158 CGFloat margin = 20; 159 // // 格子的寬 160 // CGFloat appViewW = 100; 161 // // 格子的高 162 // CGFloat appViewH = 120; 163 // 一行中用三個格子 164 NSInteger column = 3; 165 // 根據數據的個數來動畫創建每一個應用 166 for (NSInteger i = 0; i < self.appes.count; i++) { 167 168 // 1.創建appView 169 HMAppView *appView = [HMAppView appView]; 170 appView.tag = i; 171 // 2.取數組中每一個用來表示數據的模型對象 172 HMApp *app = self.appes[i]; 173 // 3.給自定義視圖傳遞模型 174 appView.app = app; 175 // 自定義視圖的大小應該根據xib中的視圖的大小來動態的設置而不應該直接固定死 176 // 4.拿到xib中appView的寬 177 CGFloat appViewW = appView.frame.size.width; 178 // xib中appView的高來表示我們一個視圖的高 179 CGFloat appViewH = appView.frame.size.height; 180 // 最左邊的間距 = (控制器view的寬 - 一行中所有格子的寬 - 格子間的間距 * (一行中格子的個數 - 1)) * 0.5 181 CGFloat leftMargin = (self.view.bounds.size.width - appViewW * column - (column - 1) *margin) * 0.5; 182 // 頭部間距 183 CGFloat topMargin = leftMargin; 184 // 計算列號 185 NSInteger col = i % column; 186 // 計算行號 187 NSInteger row = i / column; 188 // 3.設置frame 189 // 計算appViewX = 左邊間距 + (appView寬 + 格子間距) *當前格子是在當前行中的第幾個 190 CGFloat appViewX = leftMargin + (appViewW + margin) * col; 191 // appViewY = 頂部間距 + (appViewH + margin) * 當前格子在當前列中是第幾個 192 CGFloat appViewY = topMargin + (appViewH + margin) * row; 193 194 appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH); 195 196 // 4.添加到控制器的view中 197 [self.view addSubview:appView]; 198 199 } 200 } 201 202 203 #pragma mark - 懶加載 204 - (NSArray *)appes { 205 // 1.判斷當前的數組屬性是否為空,如果為空的時候再去加載數據 206 if (_appes == nil) { 207 // 2.獲取plist文件路徑 208 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; 209 // 3.加載plist文件 210 NSArray *dictArr = [NSArray arrayWithContentsOfFile:path]; 211 212 // 創建一個可變數據用來保存每一個模型對象(創建可變數組時并給其分配好容量) 213 NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:dictArr.count]; 214 // 遍歷字典數組把每一個字典轉換成一個模型對象 215 for (NSDictionary *dict in dictArr) { 216 // 創建模型對象 217 // HMApp *app = [[HMApp alloc] initWithDict:dict]; 218 HMApp *app = [HMApp appWithDict:dict]; 219 // 給模型對象中的屬性賦值 220 // app.icon = dict[@"icon"]; 221 // app.name = dict[@"name"]; 222 // 把模型添加到數組 223 [arrM addObject:app]; 224 } 225 // 把裝有所有模型的數組賦值給我們的數組屬性 226 _appes = arrM; 227 228 } 229 230 return _appes; 231 232 } 233 234 235 /** 用xib來自定義一個視圖的步驟 236 1.創建一個xib文件用來描述我們局部界面(并在里面擺放好所有的子控件,并設置好它們的屬性) 237 2.創建一個類來和我們的xib文件進行關聯(這個類也是用來管理我們的xib文件,創建的自定義類的類名最好和我們xib的文件名稱一樣)(創建的類它要繼承至什么類,取決于xib文件中最頂層控件的類型) 238 3.指定xib中class類型,如果不指定創建出來的xib和我們的自定義類沒有任何關系 239 4.把需要修改或需要設置的控件連線到我們自定義類.m中 240 5.在自定義view類的.h文件引入模型,就是把模型當成一個屬性定義在我們的自定義view類中 241 6.重寫模型屬性set方法,當外部給這個模型屬性賦值的時候就會調用模型屬性的set方法,我們在重寫的模型屬性的set方法中給自定義視圖的子控件去設置數據 242 243 */ 244 245 @end

?

補充說明

?View的封裝思路

(1) 如果一個view內部的子控件比較多,一般會考慮自定義一個view,把它內部子控件的創建屏蔽起來,不讓外界關心

(2) 外界可以傳入對應的模型數據給view,view拿到模型數據后給內部的子控件設置對應的數據

?

mvc機制簡單說明

?

說明:

(1)在開發過程中,作為控制器處理的量級應該很輕,不該操心的不操心。協調好模型和視圖就ok了,要學會當一個好老板。

(2)三個部分各司其職,數據模型只負責數據的處理,視圖部分只負責把拿到的數據進行顯示,兩個部分都是被動的,等待著大管家控制器的調遣。

(3)在OC中,如果視圖和數據模型之間有通道,那控制器是否處于失控狀態呢?

?

1.MVC是一種設計思想,貫穿于整個iOS開發中,需要積累一定的項目經驗,才能深刻體會其中的含義和好處 MVC中的三個角色 M:Model,模型數據 V:View,視圖(界面) C:Control,控制中心 2.MVC的幾個明顯的特征和體現: View上面顯示什么東西,取決于Model 只要Model數據改了,View的顯示狀態會跟著更改 Control負責初始化Model,并將Model傳遞給View去解析展示

總結

以上是生活随笔為你收集整理的iOS UI-九宫格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品18久久久久久久久久久久 | 97超碰人人澡人人 | 在线电影 一区 | 国产精品伦一区二区三区视频 | 亚洲一区二区三区91 | 亚州国产视频 | 欧美天堂久久 | 97色国产| 国产黄a三级三级三级三级三级 | 国产成人a亚洲精品 | 天天干人人插 | 日韩区在线观看 | 一区二区视频在线看 | 国产精品九九久久久久久久 | 国产一区福利在线 | 在线观看网站黄 | 国产亚洲精品日韩在线tv黄 | 欧美人人 | 久久久精品欧美 | 丁香激情五月婷婷 | 国产日产在线观看 | 亚州中文av| 国产黄色片免费在线观看 | 91免费观看国产 | 日韩精品免费一线在线观看 | av免费网页 | av综合站| 三级a视频 | 96亚洲精品久久久蜜桃 | 欧美吞精 | 精品久久久久久国产偷窥 | 久久久久五月天 | 久久久久久久久久久久电影 | 国产精品一区二区久久精品 | 久久国产经典视频 | 中文在线字幕免费观看 | 欧美成人精品欧美一级乱黄 | 97视频资源 | 天天操天天吃 | 一个色综合网站 | 欧美一级大片在线观看 | 精品亚洲视频在线 | 黄色在线免费观看网站 | 国产剧情一区二区 | 色91在线视频 | 涩涩网站在线 | 国产成人61精品免费看片 | mm1313亚洲精品国产 | av免费观看高清 | www.色综合.com | www.色午夜.com| 国产成人精品综合久久久 | 久久的色 | 国产成人精品一区二区三区免费 | 免费视频久久久久久久 | 欧美精品在线观看 | 成人小视频在线观看免费 | 久草在线免费色站 | 欧美激情视频一二区 | 99视频精品| 在线观看蜜桃视频 | 蜜臀av在线一区二区三区 | 亚洲伊人成综合网 | 免费亚洲精品 | 国产在线观看不卡 | 久久影院亚洲 | 精品国产一区二区三区四区vr | 天天做天天爱天天爽综合网 | 欧美三级高清 | 国产专区日韩专区 | 最近中文字幕完整高清 | 涩五月婷婷 | 园产精品久久久久久久7电影 | 久久官网 | 日韩av免费一区二区 | 久久久久久高潮国产精品视 | 99热官网 | 久艹视频在线观看 | 成 人 黄 色 视频免费播放 | 欧美另类一二三四区 | 在线视频 日韩 | 手机看国产毛片 | 久久综合成人网 | 国产中文字幕一区 | 免费看毛片网站 | 国产打女人屁股调教97 | www.在线看片.com | 国产理论片在线观看 | 91九色在线视频 | 91看片淫黄大片一级在线观看 | 久久九九精品久久 | 欧美另类视频 | 91视频在线播放视频 | 日韩经典一区二区三区 | 日韩av电影免费在线观看 | 成年人免费观看在线视频 | 激情五月***国产精品 | 91自拍视频在线 | 成年人在线看视频 | 在线视频观看你懂的 | 四虎成人免费观看 | 欧美午夜久久 | 在线看小早川怜子av | 国内精品久久久久久久久久 | 久久精品国产一区二区三区 | 91av视频| 欧美a在线免费观看 | 一级片免费观看 | 欧美日韩另类在线 | 免费网址在线播放 | 国产亚洲久久 | 亚洲天堂网在线视频观看 | 亚洲片在线 | 中文字幕在线观看不卡 | 午夜久久福利影院 | www免费视频com━ | 日韩av中文字幕在线免费观看 | 久久精品美女 | 欧美午夜视频在线 | 久久精品一区二 | 99视频精品视频高清免费 | 成人av一区二区兰花在线播放 | 天天拍夜夜拍 | 一 级 黄 色 片免费看的 | 欧美一级片播放 | 欧美精品久久久久久久久老牛影院 | 久 久久影院 | 久久精品一二三区 | 国产亚洲精品久久久久秋 | 国产精品a成v人在线播放 | 亚洲在线免费视频 | 久久av网址 | 欧美日韩亚洲在线观看 | 91精品国产自产在线观看 | 999成人精品 | 日韩videos高潮hd | 亚洲精品在线一区二区三区 | 久久午夜视频 | 国产精品短视频 | 亚洲蜜桃av | 91香蕉亚洲精品 | 国产一区精品在线观看 | 中文字幕三区 | 亚洲欧美色婷婷 | 天天摸天天操天天爽 | 91成人看片 | 超薄丝袜一二三区 | 在线观看爱爱视频 | 精品久久久久久国产偷窥 | 中文字幕精品三级久久久 | 久久一级电影 | 久久国产色 | 中文字幕在线观看日本 | 手机在线欧美 | 特级西西人体444是什么意思 | 狠狠天天 | 奇米影视四色8888 | 日本少妇久久久 | 日本特黄一级 | 国产视频2区 | 婷婷丁香色 | 国产精品欧美一区二区 | 日韩欧美在线播放 | 免费人成在线观看 | 欧美乱码精品一区二区 | 欧美日韩国产一二三区 | 91精品日韩| 99精品国产aⅴ | 99福利影院 | 91麻豆精品 | 亚洲精品视频在线观看免费视频 | a在线观看国产 | 四虎影视成人永久免费观看亚洲欧美 | 一二三久久久 | 国产视频精品久久 | 免费高清在线观看成人 | 欧美视频在线二区 | 色婷久久 | www亚洲国产 | 99视频在线精品国自产拍免费观看 | 在线观看中文av | 免费美女久久99 | 亚洲国产免费av | 日日干狠狠操 | 亚洲一区视频在线播放 | 亚洲精品九九 | 久久久久久久久久国产精品 | 久操中文字幕在线观看 | 亚洲精品午夜一区人人爽 | 五月激情五月激情 | 全黄色一级片 | 99精品欧美一区二区蜜桃免费 | 黄色的网站免费看 | 日本三级人妇 | 999电影免费在线观看 | 天天艹天天爽 | 国产高清视频免费在线观看 | 欧美日本三级 | av网址最新 | 亚洲va欧美va国产va黑人 | 欧美 高跟鞋交 xxxxhd | 婷婷色5月| 国产99久久久欧美黑人 | 久久这里只有精品视频99 | 人人澡人人模 | 亚洲人成综合 | 99热高清| 亚洲欧美综合精品久久成人 | 国产精品久久久一区二区 | 亚洲在线成人精品 | 亚洲三级精品 | 四虎影视av | 国产欧美三级 | 中文在线中文资源 | 国产资源免费 | 国产在线观看免费观看 | 97国产在线播放 | 在线观看欧美成人 | 国产在线精品一区二区 | 国产精品国产三级国产aⅴ9色 | 久久综合九色综合97婷婷女人 | 激情在线网| 午夜婷婷综合 | 久草精品视频在线观看 | 日韩成人精品一区二区 | 福利网址在线观看 | 国产69精品久久久久久 | 久久8精品| 欧美日韩国产一区二区三区 | 日韩在线中文字幕 | 天天干,天天射,天天操,天天摸 | 婷婷丁香综合 | 黄色国产高清 | 超碰97在线资源站 | 在线精品视频在线观看高清 | 亚洲国产精品小视频 | 婷婷99| 国产成人精品一区二区三区在线 | 狠狠干激情 | 国产日韩视频在线播放 | 激情欧美一区二区三区 | 中文字幕一区二 | 69久久久 | 国产精品白浆 | 国产在线传媒 | 91久久久久久久 | 1024手机基地在线观看 | 91视频中文字幕 | 毛片基地黄久久久久久天堂 | 亚洲最大成人免费网站 | 精品久久福利 | 亚洲黄色免费在线看 | 国产免费高清 | 久久精品福利视频 | 日本精品视频在线 | 亚洲精品99久久久久中文字幕 | 中文字幕丰满人伦在线 | 久热免费在线 | 97色噜噜| 日韩午夜网站 | 亚洲成人黄色在线观看 | 午夜精品福利一区二区三区蜜桃 | 国产精品久久久久久久免费观看 | 国产精品免费久久久久影院仙踪林 | 五月天高清欧美mv | 亚洲第一中文网 | 在线你懂的视频 | 曰本三级在线 | 亚洲日韩中文字幕在线播放 | 午夜久久视频 | 亚洲香蕉在线观看 | 色综合久久综合 | 三级黄色片在线观看 | 国产亚洲久一区二区 | 婷婷开心久久网 | 99r在线精品 | 色婷av | 欧洲一区精品 | aa一级片| 午夜av免费看 | 日韩视 | 欧美99久久| 91看国产 | 国产视频亚洲视频 | 五月婷婷久久丁香 | 深爱激情久久 | 国产午夜精品久久久久久久久久 | 五月婷婷久草 | 日韩精品在线看 | 69国产精品视频 | 欧美日韩中文在线 | av久久在线 | 九九色在线 | 波多野结衣一区 | 精品国内自产拍在线观看视频 | 日本精品久久久久中文字幕 | 色婷在线 | 久久99深爱久久99精品 | 免费美女av | 国产一区视频导航 | 五月激情亚洲 | 国产黄色片久久久 | 成人黄大片视频在线观看 | 偷拍精品一区二区三区 | 国产日产高清dvd碟片 | 婷婷综合五月天 | 久久精美视频 | 国产精品一区专区欧美日韩 | 日韩网站在线观看 | 欧美色操 | av电影免费在线播放 | 精品久久久久久久久亚洲 | 人人玩人人添人人 | 国产中文字幕在线免费观看 | 免费看黄在线 | 超碰国产97 | 免费观看黄色12片一级视频 | 婷婷久久久 | 丁香花在线视频观看免费 | 91在线视频观看免费 | 国产精品人成电影在线观看 | www在线观看视频 | 国产一区二区三区久久久 | 亚洲日日射 | 四虎影视成人精品国库在线观看 | 久久久2o19精品 | 激情网第四色 | 色婷婷免费视频 | 成人午夜免费福利 | 亚洲欧洲成人精品av97 | 欧美中文字幕第一页 | 成人在线免费看 | 色婷婷精品大在线视频 | 免费看黄在线 | 亚洲精品资源在线观看 | 狠狠综合久久 | 午夜久久影视 | 激情欧美一区二区免费视频 | 91av欧美| 天天操天天操天天操天天操 | 欧美色图一区 | 美女免费网视频 | 亚洲精品视频在线观看视频 | 国产免费xvideos视频入口 | 欧美另类调教 | 一区二区精品久久 | 欧美性生活免费 | 日韩激情第一页 | 日韩mv欧美mv国产精品 | 久99久在线 | 福利一区二区三区四区 | 在线观看视频免费大全 | 97超碰人人在线 | 日韩在线观看 | av中文字幕网址 | 日韩免费在线一区 | 狠狠色丁香婷婷综合橹88 | 欧美日韩中文在线观看 | 日韩在线观看一区二区 | 久久国产精品99久久久久久老狼 | 狠狠色狠狠色综合日日小说 | 久久久久久美女 | 四虎在线永久免费观看 | 国产v在线观看 | 久久久久久久久久久成人 | 久久精品中文 | 婷婷综合五月天 | 五月婷婷在线视频观看 | 久久午夜精品 | 国产日产高清dvd碟片 | 免费日韩 精品中文字幕视频在线 | 在线观看一区二区精品 | 91麻豆.com| 久久久www成人免费精品 | 高潮久久久久久久久 | 夜夜视频资源 | 日韩激情片在线观看 | 在线看一级片 | 一区二区三区中文字幕在线 | 天天添夜夜操 | 男女激情麻豆 | 久久三级视频 | 精品理论片 | 一区二区视频在线播放 | 日本久久成人中文字幕电影 | 欧美一级淫片videoshd | 色婷婷在线观看视频 | 99精品视频一区 | av韩国在线 | 69久久夜色精品国产69 | www色网站| 日本婷婷色 | 久久小视频 | 99精品免费 | 久久爱资源网 | av电影不卡在线 | 国产精品国产三级国产aⅴ无密码 | 午夜视频一区二区三区 | 久久精品电影网 | 日韩电影一区二区三区 | 97精品国产97久久久久久春色 | 中文久草 | 在线视频你懂得 | 最近中文字幕完整高清 | 日韩草比 | 狠狠躁日日躁狂躁夜夜躁av | 久草热视频 | 碰碰影院| 欧美在线视频第一页 | 久久精品亚洲精品国产欧美 | 99精品在线视频观看 | 99一区二区三区 | www免费网站在线观看 | 欧美一二在线 | 久久伊人精品一区二区三区 | 亚洲视频网站在线观看 | 午夜精品区| 日韩网站在线看片你懂的 | 国产色道| 亚洲成人精品国产 | 亚洲欧洲国产日韩精品 | 日韩精品久久久久久中文字幕8 | 欧美中文字幕久久 | 亚洲最大激情中文字幕 | 午夜婷婷在线观看 | 天天综合导航 | 久久久亚洲网站 | 日韩专区在线观看 | 日韩欧美在线视频一区二区 | 91av在线电影 | 91麻豆精品一区二区三区 | 欧美久久久一区二区三区 | 一区二区三区播放 | 亚洲六月丁香色婷婷综合久久 | 久草久视频 | 中文字幕在线一区二区三区 | 成年人毛片在线观看 | 国产一区二区三区免费在线观看 | 亚洲成人xxx | 五月综合 | 国产精品久久久久久久电影 | 欧美日韩另类视频 | 超碰97人人干| 成人黄色短片 | 96精品视频 | 天天射射天天 | 午夜久久影视 | 日本精品一区二区三区在线播放视频 | 国产美女永久免费 | 中文字幕在线视频网站 | 日本久久中文 | 婷婷丁香在线观看 | av在线收看 | 国产高清中文字幕 | 免费视频a | 久久人人爽人人 | 日韩高清久久 | 成人免费网站在线观看 | 日本中文一级片 | 91在线最新 | 九九欧美 | 日韩久久精品一区二区三区 | 日韩v在线91成人自拍 | 亚洲欧美乱综合图片区小说区 | 美女视频黄网站 | 欧美 亚洲 另类 激情 另类 | 欧美日韩视频在线观看一区二区 | 国产午夜三级一二三区 | 97超级碰碰碰碰久久久久 | 一区二区三区在线看 | 日日夜夜狠狠干 | 日韩a在线 | 99精品国产99久久久久久福利 | 成人av电影免费 | 中文av在线免费观看 | 国产高清日韩欧美 | 成人在线视频你懂的 | 91在线视频播放 | a级国产乱理论片在线观看 伊人宗合网 | 国产精品日韩在线观看 | 欧美日韩亚洲精品在线 | 免费久久精品视频 | 日日操夜 | 亚洲高清在线精品 | 亚洲精品视频中文字幕 | 欧美日韩亚洲第一 | 国产91精品看黄网站 | 国产一区二区视频在线 | 中文字幕在线看 | 在线成人高清电影 | 91中文字幕在线视频 | 久久综合免费视频影院 | 成人一级电影在线观看 | 亚洲美女免费视频 | www.色婷婷 | 天天天天色综合 | 国产精品午夜久久久久久99热 | 99久久电影 | 色久av| 国产精品一区二区三区电影 | 国精产品永久999 | 最近中文字幕mv免费高清在线 | 天天综合网国产 | 中文字幕在线日 | 欧美日韩亚洲精品在线 | 欧美一进一出抽搐大尺度视频 | 久久超级碰视频 | 国产日韩在线视频 | 国语精品久久 | 一区二区精品久久 | 亚洲精品国偷自产在线91正片 | 精品亚洲一区二区 | 久久精品牌麻豆国产大山 | 欧美激情第一页xxx 午夜性福利 | 精品国产片 | 免费视频一级片 | 免费看黄色毛片 | 国产精品成人一区二区三区吃奶 | 国产成人一区二区三区久久精品 | av软件在线观看 | 亚洲蜜桃在线 | 丰满少妇对白在线偷拍 | 特级aaa毛片 | 色九九视频 | 国产视频日本 | 成人在线一区二区三区 | 免费在线观看日韩 | 久久网站免费 | 精品国产伦一区二区三区观看说明 | 免费看成年人 | 国产精品18久久久久vr手机版特色 | 欧美三人交 | 日韩在线一二三区 | 欧美激情综合五月色丁香 | 伊人狠狠 | 国产美女网站视频 | 国产成人久久精品77777 | 免费国产在线精品 | 超碰在线观看99 | 欧美性色19p | 狠狠干天天干 | a黄色片在线观看 | 午夜精品一区二区三区免费视频 | 婷婷深爱五月 | 日韩在线观看第一页 | 深夜精品福利 | 91网在线看 | 日韩精品不卡在线观看 | 日韩在线视频网址 | 三级动态视频在线观看 | 亚洲一区视频在线播放 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 最近免费在线观看 | 毛片网在线播放 | japanesefreesex中国少妇 | 日韩电影一区二区三区 | 欧美国产亚洲精品久久久8v | 少妇bbbb搡bbbb搡bbbb | 色.www | 丁香综合网 | 欧美日韩精 | 久久久伊人网 | 蜜臀一区二区三区精品免费视频 | 黄色官网在线观看 | 在线播放亚洲激情 | av丝袜在线| 久久久免费精品视频 | 69国产盗摄一区二区三区五区 | 久久在线精品视频 | 亚州av一区 | 欧美日韩中文字幕在线视频 | 在线观看av网站 | 九九亚洲视频 | 色婷婷精品大在线视频 | 六月激情婷婷 | 日韩av在线一区二区 | 国产不卡免费视频 | 精品在线视频播放 | 69国产盗摄一区二区三区五区 | 国产一级二级三级在线观看 | 在线免费黄色av | 69国产精品视频 | 国产精品剧情在线亚洲 | 樱空桃av | 欧美精品视| 中文字幕亚洲精品在线观看 | 热九九精品 | 99在线免费观看视频 | 中文字幕在线观看完整版 | 免费日韩电影 | 欧美性生交大片免网 | 91精品国产综合久久福利不卡 | 日韩av片在线 | 99热这里只有精品1 av中文字幕日韩 | 久久在线免费观看 | 婷婷爱五月天 | 日韩在线播放欧美字幕 | 国产成人黄色av | 久草在线免费色站 | 亚洲综合五月天 | 99在线国产| 久久在线看 | 99久久一区| 久久亚洲欧美日韩精品专区 | www.91国产| 中文字幕日韩一区二区三区不卡 | 天天干天天综合 | 超碰在线免费97 | 伊人久久在线观看 | 日韩欧美中文 | 欧美成年性 | 五月天色站 | 久久精品国产免费看久久精品 | 久久精品国产精品亚洲 | 日本在线视频一区二区三区 | 日韩av一区二区三区在线观看 | 亚洲精品av中文字幕在线在线 | 国产一级不卡视频 | 日本精品一区二区三区在线观看 | 国产午夜免费视频 | 中文字幕中文字幕中文字幕 | 一级黄色片在线观看 | 久久社区视频 | 最新av网址大全 | 亚洲精品国产精品国自 | 一区二区三区四区精品 | 欧美精品日韩 | 成人午夜久久 | 国产在线观看黄 | 日韩视频免费观看高清完整版在线 | www国产亚洲精品久久网站 | 人人澡人人爽欧一区 | 人人狠狠 | 国产视频91在线 | 91av视频在线观看免费 | 黄色软件视频网站 | 91污在线观看 | 天天操天天摸天天爽 | 91精品视频播放 | 日韩理论片在线观看 | 日韩超碰在线 | 成年人免费观看在线视频 | www.com.黄 | 国产精品网在线观看 | 丁香影院在线 | 网址你懂的在线观看 | 最新色站| 亚洲成人频道 | 欧美久久久一区二区三区 | 欧美精彩视频在线观看 | 91中文字幕网 | 黄色软件在线观看视频 | 天天操天天能 | 五月婷婷丁香综合 | 亚洲美女精品区人人人人 | 69av视频在线 | av青草| 黄色高清视频在线观看 | 啪啪免费视频网站 | 日韩综合精品 | 精品1区2区3区 | 香蕉影视 | 97网站| 狂野欧美激情性xxxx欧美 | 人人爽人人爽人人 | 91精品久久久久久久久久入口 | 久久久精品网站 | 日韩国产高清在线 | 亚洲热久久| 日韩免费在线观看网站 | 一区二区三区在线电影 | 国产小视频在线看 | 亚洲国产精品免费 | 久久久国产精品久久久 | 91在线视频一区 | 伊人久久一区 | 国产成人区 | 日本视频高清 | 99精彩视频在线观看免费 | 国产性xxxx | 天天曰夜夜操 | 九九九九九九精品任你躁 | 99精品福利视频 | 天天操夜操 | 久久精品香蕉视频 | 麻豆影视网站 | av一级久久 | 青草视频免费观看 | 色婷婷在线观看视频 | 天天干天天怕 | 在线观看精品一区 | 亚洲精品国产精品久久99 | 色综合久久88色综合天天免费 | 四虎视频| 97超碰精品 | 中文字幕一区二区三区久久蜜桃 | 中文字幕在线精品 | 国产精品成人av久久 | 一个色综合网站 | 欧美午夜精品久久久久 | 色视频成人在线观看免 | 怡红院久久 | 99精品视频在线观看免费 | 国产成人免费av电影 | 久久久激情网 | 特级西西444www大胆高清无视频 | 久久综合欧美 | 日韩理论片在线观看 | 国产又粗又硬又爽的视频 | 欧美精品久久久久久久久老牛影院 | 福利精品在线 | 免费日韩 精品中文字幕视频在线 | 九九免费在线观看视频 | 免费日韩一区二区 | 99re亚洲国产精品 | 亚洲欧美在线综合 | 日韩资源在线播放 | 中文一区在线 | 日韩成人免费在线电影 | 性色av一区二区 | 日韩免费成人av | 一区二区视频在线播放 | 日本在线免费看 | 国产资源av| 午夜视频在线观看欧美 | 久久影视一区 | 国产视频一二区 | 激情综合啪 | 3d黄动漫免费看 | 天天曰视频 | 麻豆久久| 97精品欧美91久久久久久 | 久久无码av一区二区三区电影网 | 99热这里只有精品免费 | 日韩欧美网址 | 中文字幕第一页av | 国产成人精品一区在线 | 国产精品视频资源 | 天天伊人网 | 精品一区91 | 九九热免费在线观看 | 粉嫩aⅴ一区二区三区 | 99久久精品免费一区 | 69中文字幕| 98精品国产自产在线观看 | 国产精品美女免费 | 91精品第一页 | 精品亚洲视频在线观看 | 久久久久久免费网 | 色噜噜狠狠色综合中国 | 国产日韩欧美精品在线观看 | 亚洲激情 | 亚洲欧美视频网站 | 亚洲人片在线观看 | 国产精品国产亚洲精品看不卡 | 成年人免费观看在线视频 | 丁香激情综合久久伊人久久 | 成人va在线观看 | 久久久久久久国产精品影院 | 黄色亚洲大片免费在线观看 | 国产护士在线 | 免费视频二区 | 亚洲人久久 | 国产精品一区二区在线观看免费 | 午夜av网站| 成年人电影免费看 | 激情五月综合网 | 99免费| 国产精品美女免费看 | 国产精品一区欧美 | 国产成人精品一区二区三区福利 | 精品国产乱子伦一区二区 | 日韩在线欧美在线 | 国产成人久久精品一区二区三区 | 人人超碰免费 | 伊人天天操 | 精品久久久久久久久久国产 | 中文字幕中文 | 成人cosplay福利网站 | 国产日本亚洲 | 狠狠网亚洲精品 | 国产精品久久三 | 国产亚洲精品久久久久久网站 | 日日夜夜人人天天 | 97超碰伊人| 亚洲成av人片 | 中文字幕在线影院 | 午夜国产在线观看 | 日一日操一操 | 激情电影影院 | 在线观看免费观看在线91 | 精品久久久久久亚洲 | 国产拍在线 | 亚在线播放中文视频 | 在线观看视频一区二区三区 | 亚洲日本一区二区在线 | 亚欧洲精品视频在线观看 | 一区二区视| 国产色在线视频 | 国产 色 | 91插插插网站 | 国内精品视频免费 | 国产精品乱码久久久久久1区2区 | 中文字幕在线视频国产 | 亚洲人成人99网站 | 成人国产精品av | 欧美日韩免费一区二区三区 | 在线看国产一区 | 久草91视频| 久久一区二 | 欧美国产一区二区 | 欧美日韩亚洲精品在线 | 久久久久久国产精品免费 | 国产亚洲精品成人av久久ww | 99久久精品久久久久久清纯 | 一区二区三区日韩视频在线观看 | 啪啪精品 | 久久国产精品99久久久久久老狼 | 色wwwww | 亚洲爱爱视频 | 国产精品岛国久久久久久久久红粉 | 99在线高清视频在线播放 | 成人小视频在线免费观看 | 久久99国产精品久久99 | 在线看的毛片 | 亚洲在线网址 | 亚洲视频 在线观看 | 国产一级片播放 | 天天操天天干天天爽 | 日韩黄色影院 | 女人魂免费观看 | 久久久麻豆精品一区二区 | 欧美日韩久久不卡 | 久久婷婷精品 | 久久黄色免费观看 | 最近能播放的中文字幕 | 国产剧在线观看片 | 亚洲在线看 | 国产成人精品一区二区三区福利 | 在线免费看黄网站 | 国产精品美女免费看 | 天天色官网 | 在线蜜桃视频 | 久草免费在线视频 | 欧美久久久久久久久久久久久 | 亚州精品国产 | 欧美福利视频一区 | 国产精美视频 | 狠狠躁日日躁狂躁夜夜躁 | 免费网站黄 | 亚洲一区二区视频在线播放 | 97超碰精品 | 中文字幕中文字幕在线一区 | 婷婷丁香六月 | 国产日韩欧美在线免费观看 | 精品一区二区免费在线观看 | av免费在线看网站 | 这里只有精品视频在线 | 91探花系列在线播放 | 91av在线不卡| 国产精品对白一区二区三区 | 天天干天天操天天入 | 日韩av影视| 国产视频精品视频 | 丁香花五月 | 成年性视频 | 一区国产精品 | 国产免码va在线观看免费 | 欧美日韩一级久久久久久免费看 | 国产亚洲精品久久久久久大师 | 国模视频一区二区三区 | 激情在线五月天 | 在线国产视频一区 | 在线观看日韩免费视频 | 激情av五月婷婷 | 在线观看国产高清视频 | 黄色av影视 | 操老逼免费视频 | 福利视频网址 | 日韩一级片大全 | 日本精品视频一区 | 亚洲精品乱码久久久一二三 | 色播五月激情综合网 | 日韩有码网站 | 亚洲高清精品在线 | 玖玖视频 | 天天爽网站| 欧洲成人av| 国产亚洲精品女人久久久久久 | 九色视频网址 | 精品无人国产偷自产在线 | 2017狠狠干 | 精品国产一区二区三区不卡 | 在线视频 国产 日韩 | av软件在线观看 | 亚洲首页 | 91人人澡人人爽人人精品 | 欧洲精品在线视频 | 一区二区激情 | 国产美女视频网站 | 欧美日韩亚洲第一 | 天天干天天弄 | 91一区啪爱嗯打偷拍欧美 | 国产日韩欧美综合在线 | 亚洲干视频在线观看 | 808电影免费观看三年 | 国产精品原创av片国产免费 | 中文资源在线播放 | 在线看小早川怜子av | 国语精品免费视频 | 97日日碰人人模人人澡分享吧 | 色综合亚洲精品激情狠狠 | 99精品国产福利在线观看免费 | 91色九色| 成人午夜精品 | 欧美日韩在线播放 | 人人干人人搞 | 日本精品视频在线播放 | av噜噜噜在线播放 | www夜夜 | 中文字幕在线观看网址 | 欧美性性网 | 亚洲精品免费在线观看 | 一区二区视频在线免费观看 | 日韩v欧美v日本v亚洲v国产v | 日韩中文字幕免费视频 | 不卡视频在线 | 日韩中文字幕网站 | 亚洲毛片在线观看. | 777久久久| 成人av免费网站 | 免费观看视频黄 | 97超碰在线久草超碰在线观看 | 蜜臀av网站| japanese黑人亚洲人4k | 狠狠色丁香久久婷婷综 | 久久久久久免费视频 | 日本久久电影 | 欧美精品首页 | 亚洲成人精品在线观看 | 亚洲国产视频在线 | 毛片的网址| 黄色影院在线观看 | 久久夜色精品国产欧美乱极品 | 日本夜夜草视频网站 | 国产成人一二片 | 亚洲人在线7777777精品 | 在线黄色免费av | 亚洲最新视频在线播放 | 91丨九色丨丝袜 | 免费亚洲视频在线观看 | 久色网 | 在线视频 成人 | 涩涩资源网| 久久人人看 | 亚洲国产剧情 | 精品久久亚洲 | 美女在线观看av | 91丨九色丨国产在线观看 | 国产精品9区 | 午夜精品一二区 | 亚洲a色| 久久久美女 | 婷婷色网 | 99精品久久99久久久久 | 久热电影 | 亚洲午夜久久久久 | 韩日电影在线 | 久久美女免费视频 | 日韩一区精品 | 美女视频黄在线观看 | 丁香在线视频 | 国产高清 不卡 | 天天干天天玩天天操 | 成人av电影在线观看 | 日韩三级久久 | 91热爆视频| 午夜国产福利在线观看 | 奇米影视777四色米奇影院 | 免费一级黄色 | 一区二区激情 | 亚洲经典中文字幕 | 亚洲成免费 | 蜜桃视频在线视频 | 草久久精品 | 91精品视频网站 | 国产毛片久久 | 久久久91精品国产一区二区精品 | 久久欧美精品 | 国产精品久久久久久久久久东京 | 亚州人成在线播放 | 国产看片网站 | 国产专区日韩专区 | 久久久久久久久久电影 | 久久草网站 | 国产不卡免费 | 四虎在线视频免费观看 | 国产成人精品一区一区一区 |