精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

史上比較用心的純代碼實現AutoLayout

移動開發 iOS
使用 Objective-C 純代碼編寫 AutoLayout,看 AutoLayout 的字面理解就是自動布局,聽起來好像蠻屌的樣子。說白了就是適配:適應、兼容各種不同的情況,包括不同版本的操作系統的適配(系統適配)和不同屏幕尺寸的適配(屏幕適配)。

入職有兩三個月了吧,都是使用 Objective-C 純代碼(雖然有時候偷偷參雜一些 Swift 開源庫)來編寫公司APP,寫布局的時候幾乎都是要么在初始化的時候用 initWithFrame,要么就初始化完畢之后用 view.frame。雖然這種方法很直觀,一眼就可以看出這個 view 的位置以及大小,但是壞處也是有的,比如說在計算的時候麻煩等等。

概述

使用 Objective-C 純代碼編寫 AutoLayout,看 AutoLayout 的字面理解就是自動布局,聽起來好像蠻屌的樣子。說白了就是適配:適應、兼容各種不同的情況,包括不同版本的操作系統的適配(系統適配)和不同屏幕尺寸的適配(屏幕適配)。

在 Storyboard 中,AutoLayout 有以下 3 個常用面板:

1.Align(對齊) 

 

 

 

2.Pin(相對) 

 

 

 

3.Resolve Auto Layout Issues(約束處理) 

 

 

 

在 Storyboard 中實現 AutoLayout 我就不在本文講解,因為講了就是違背了不忘初心,方得始終的標題了。 

 

 

Talk is cheap, show me the code

先說一下用代碼實現 AutoLayout 步驟,別眨眼:

  1. 利用 NSLayoutConstraint 類創建具體的約束對象;
  2. 添加約束對象到相應的 view 上,代碼有這兩種:
  1. - (void)addConstraint:(NSLayoutConstraint *)constraint
  2.  
  3. - (void)addConstraints:(NSArray *)constraints;  

或許有人問了,原來才兩個步驟就可以了,我剛剛褲子都脫了,你就給我看這個?!

話不多說,馬上 show you the code !

先看看我們使用 frame 的方式是如何確定一個 view 的位置的:

  1. - (void)viewDidLoad { 
  2.  
  3.     [super viewDidLoad]; 
  4.  
  5.     self.title = @"使用 frame 的方式"
  6.  
  7.     UIView *purpleView = [[UIView alloc] initWithFrame:CGRectMake(100, 200, 150, 150)]; 
  8.  
  9.     purpleView.backgroundColor = [UIColor purpleColor]; 
  10.  
  11.     [self.view addSubview:purpleView]; 
  12.  
  13.  

代碼很簡單,運行效果如下: 

 

 

 

再來看看 AutoLayout 的實現:

  1. - (void)viewDidLoad { 
  2.  
  3.     [super viewDidLoad]; 
  4.  
  5.     self.title = @"使用 AutoLayout 的方式"
  6.  
  7.     UIView *purpleView = [[UIView alloc] init]; 
  8.  
  9.     purpleView.backgroundColor = [UIColor purpleColor]; 
  10.  
  11.     // 禁止將 AutoresizingMask 轉換為 Constraints 
  12.  
  13.     purpleView.translatesAutoresizingMaskIntoConstraints = NO
  14.  
  15.     [self.view addSubview:purpleView]; 
  16.  
  17.   
  18.  
  19.     // 添加 width 約束 
  20.  
  21.     NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:purpleViewattribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttributemultiplier:0.0 constant:150]; 
  22.  
  23.     [purpleView addConstraint:widthConstraint]; 
  24.  
  25.   
  26.  
  27.     // 添加 height 約束 
  28.  
  29.     NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:purpleViewattribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttributemultiplier:0.0 constant:150]; 
  30.  
  31.     [purpleView addConstraint:heightConstraint]; 
  32.  
  33.   
  34.  
  35.     // 添加 left 約束 
  36.  
  37.     NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:purpleViewattribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeftmultiplier:1.0 constant:100]; 
  38.  
  39.     [self.view addConstraint:leftConstraint]; 
  40.  
  41.   
  42.  
  43.     // 添加 top 約束 
  44.  
  45.     NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:purpleViewattribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTopmultiplier:1.0 constant:200]; 
  46.  
  47.     [self.view addConstraint:topConstraint]; 
  48.  

 看完這段代碼,我收到了驚嚇!我被這一大段代碼嚇到了,很多童鞋看到那么簡單的布局需要寫那么多代碼,可能就被嚇跑了。我只能說一句:先不要走,待我慢慢解釋~

創建約束對象(NSLayoutConstraint)的常用方法

一個 NSLayoutConstraint 對象就代表一個約束。

  1. + (id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c; 

總共有 7 個參數 🌚,那就以 leftConstraint 為例吧介紹這 7 個參數吧

  • ☞ view1: 要約束的控件(purpleView)
  • ☞ attr1: 約束的類型(常量),就是要做怎么樣的約束,大家可以進去看看都有什么常量(這里是NSLayoutAttributeLeft)
  • ☞ relation: 與參照控件之間的關系(常量),包括等于、大于等于、小于等于(NSLayoutRelationEqual 是指等于)
  • ☞ view2: 參照的控件(self.view)
  • ☞ attr2: 約束的類型(常量),就是要做怎么樣的約束,大家可以進去看看都有什么常量(這里是NSLayoutAttributeLeft)(NSLayoutAttributeLeft)
  • ☞ multiplier: 乘數,就是多少倍(1.0)
  • ☞ c: 常量,做好了上述的約束之后會加上這個常量(100)

所以 leftConstraint 就是代表:要約束的控件purpleView 的左間距是等于參照控件 self.view 的左間距的 1.0 倍加上 100。

所以我們得出 AutoLayout 的核心計算公式:

  1. obj1.property1 =(obj2.property2 * multiplier)+ constant value 

1.添加約束(addConstraint)的規則

在創建約束了之后,需要將其添加到作用的控件上才能生效,注意在添加約束的時候目標控件需要遵循以下規則(這里控件就用 view 簡單表示吧):

(1)對于兩個同層級 view 之間的約束關系,添加到它們的父 view 上 

 

 

 

對于兩個同層級 view 之間的約束關系,添加到它們的父 view 上

(2)對于兩個不同層級 view 之間的約束關系,添加到他們最近的共同父 view 上 

 

 

 

對于兩個不同層級 view 之間的約束關系,添加到他們最近的共同父 view 上

(3)對于有層次關系的兩個 view 之間的約束關系,添加到層次較高的父 view 上

對于有層次關系的兩個 view 之間的約束關系,添加到層次較高的父 view 上

(4)對于比如長寬之類的,只作用在該 view 自己身上的話,添加到該 view 自己上,不用圖了吧🌚

可以看出,widthConstraint 和 Constraint 屬于第(4)種,leftConstraint 和 rightConstraint 屬于第(3)種。

1.代碼實現 AutoLayout 的注意事項

如果只是創建和添加了約束,是不能正常運行的,要做好以下的工作:

(1)要先禁止 autoresizing 功能,防止 AutoresizingMask 轉換成 Constraints,避免造成沖突,需要設置 view 的下面屬性為 NO:

  1. view.translatesAutoresizingMaskIntoConstraints = NO

(2)添加約束之前,一定要保證相關控件都已經在各自的父控件上。用上面的例子就是 [self.view addSubview:purpleView]; 一定要放在添加 left 約束之前,否則程序會 crash,因為要確保 purpleView 要已經在 self.view 上了。建議先寫 [self.view addSubview:purpleView]; 之后,再專心寫約束。

(3)不用再給 view 設置 frame

看到了吧,那么簡單的一個界面,用 AutoLayout 實現的話竟然要那么多代碼,感覺上并沒有那么方便是吧?

其實 AutoLayout 要看應用內容決定,上面只是一個使用的 demo。如果你的內容是信息眾多,同時需要展示的類別也很多,尺寸動態不定,比如說微博列表、QQ 動態列表等等,寫這些復雜界面使用 AutoLayout 能給予(jǐ yǔ🌚)很大的幫助。

Apple 為了簡化 AutoLayout 復雜的代碼,開發了一種 VFL 語言(Visual format language),事實上沒看見簡化多少,而且還有比較大的局限性,這里就不介紹了,想了解的童鞋自己 Google 去。

算了,給個官方鏈接吧:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html

如何優雅的代碼編寫 AutoLayout

看到了 Apple 自帶的 AutoLayout 實現方式,感覺實在是太惡心了,那么如何優雅的代碼編寫 AutoLayout 呢?

—— 使用第三方框架 Masonry。GitHub: https://github.com/SnapKit/Masonry 看它的介紹,感覺挺牛掰的:

Harness the power of AutoLayout NSLayoutConstraints with a simplified, chainable and expressive syntax. Supports iOS and OSX Auto Layout.

看完 README.md 文件發現的確蠻優雅的。

先一覽 Masonry 是如何實現 AutoLayout 的:

  1. #import "ViewController.h" 
  2.  
  3. #import "Masonry.h" // 第三方或自己寫的用引號,系統自帶用雙引號。 
  4.  
  5.   
  6.  
  7. @interface ViewController () 
  8.  
  9. @end 
  10.  
  11.   
  12.  
  13. @implementation ViewController 
  14.  
  15.   
  16.  
  17. - (void)viewDidLoad { 
  18.  
  19.     [super viewDidLoad]; 
  20.  
  21.   
  22.  
  23.     UIView *purpleView = [[UIView alloc] init]; 
  24.  
  25.     purpleView.backgroundColor = [UIColor purpleColor]; 
  26.  
  27.     [self.view addSubview:purpleView]; 
  28.  
  29.   
  30.  
  31.     [purpleView mas_makeConstraints:^(MASConstraintMaker *make) { 
  32.  
  33.         // 在這個 block 里面,利用 make 對象創建約束 
  34.  
  35.         make.size.mas_equalTo(CGSizeMake(100, 100)); 
  36.  
  37.         make.center.mas_equalTo(self.view); 
  38.  
  39.     }]; 
  40.  
  41.  

運行效果: 

 

 

 

創建一個長和寬均為 100、與父 view 居中的 view

注意:purpleView.translatesAutoresizingMaskIntoConstraints = NO;不需要在這里寫了,因為 Masonry 已經寫好了。

Masonry 開車,趕緊上車

一步一步跟著來,哈哈嘻嘻

  1. // 長寬均為 100,粘著父 view 右下角 
  2.  
  3.    [purpleView mas_makeConstraints:^(MASConstraintMaker *make) { 
  4.  
  5.        make.width.equalTo(@100); 
  6.  
  7.        make.height.equalTo(@100); 
  8.  
  9.        make.right.equalTo(self.view); 
  10.  
  11.        make.bottom.equalTo(self.view); 
  12.  
  13.    }];   

 

 

 

長寬均為 100,粘著父 view 右下角

  1. // 長寬均為 100,粘著父 view 右下角,間距為 16 
  2.  
  3.    [purpleView mas_makeConstraints:^(MASConstraintMaker *make) { 
  4.  
  5.        make.width.equalTo(@100); 
  6.  
  7.        make.height.equalTo(@100); 
  8.  
  9.        // 這里也可以寫 make.right.equalTo(self.view.mas_right).offset(-16); 
  10.  
  11.        // 為了增強可讀性,可以在 .offset 前加上 .with 或者 .and: make.right.equalTo(self.view).with.offset(-16); 看自己習慣吧 
  12.  
  13.        make.right.equalTo(self.view).offset(-16); 
  14.  
  15.        // 這里也可以寫 make.right.equalTo(self.view.mas_bottom).offset(-16); 
  16.  
  17.        make.bottom.equalTo(self.view).offset(-16); 
  18.  
  19.    }];   

 

 

 

長寬均為 100,粘著父 view 右下角,間距為 16

看到上面代碼的包裝好的 @100,其實也可以直接傳值 100,不過要把 equalTo 改成 mas_equalTo,這樣它就自動幫你包裝好了。

  1. make.width.mas_equalTo(100); 
  2.  
  3. make.height.mas_equalTo(100);  

其實 mas_equalTo 就是一個宏,大家可以進去看看定義。

  • mas_equalTo 這個方法會對參數進行包裝
  • equalTo 這個方法不會對參數進行包裝
  • mas_equalTo 的功能強于 equalTo

大家可能會覺得有點兒暈,有時候用 mas_equalTo,有時候用 equalTo,其實大家可以在 pch 文件里定義兩個宏,就可以完美解決這個糾結問題。注意要寫在 #import "Masonry.h" 前面。

  1. //define this constant if you want to use Masonry without the 'mas_' prefix,這樣子 `mas_width` 等就可以寫成 `width` 
  2.  
  3. #define MAS_SHORTHAND 
  4.  
  5.   
  6.  
  7. //define this constant if you want to enable auto-boxing for default syntax,這樣子 `mas_equalTo` 和 `equalTo` 就沒有區別了 
  8.  
  9. #define MAS_SHORTHAND_GLOBALS  

好,現在來一個稍微比剛才的復雜一點點的界面:

  1. - (void)viewDidLoad { 
  2.  
  3.     [super viewDidLoad]; 
  4.  
  5.   
  6.  
  7.     UIView *purpleView = [[UIView alloc] init]; 
  8.  
  9.     purpleView.backgroundColor = [UIColor purpleColor]; 
  10.  
  11.     [self.view addSubview:purpleView]; 
  12.  
  13.   
  14.  
  15.     UIView *orangeView = [[UIView alloc] init]; 
  16.  
  17.     orangeView.backgroundColor = [UIColor orangeColor]; 
  18.  
  19.     [self.view addSubview:orangeView]; 
  20.  
  21.   
  22.  
  23.     CGFloat margin = 16; 
  24.  
  25.     CGFloat height = 32; 
  26.  
  27.     [purpleView mas_makeConstraints:^(MASConstraintMaker *make) { 
  28.  
  29.         make.left.equalTo(self.view).offset(margin); 
  30.  
  31.         make.bottom.equalTo(self.view).offset(-margin); 
  32.  
  33.         make.right.equalTo(orangeView.left).offset(-margin); 
  34.  
  35.         make.height.equalTo(height); 
  36.  
  37.         make.width.equalTo(orangeView); 
  38.  
  39.     }]; 
  40.  
  41.   
  42.  
  43.     [orangeView mas_makeConstraints:^(MASConstraintMaker *make) { 
  44.  
  45.         make.bottom.equalTo(self.view).offset(-margin); 
  46.  
  47.         make.right.equalTo(self.view).offset(-margin); 
  48.  
  49.         make.height.equalTo(height); 
  50.  
  51.     }]; 
  52.  
  53.  

 

 

 

兩個等高等寬的 view 平分屏幕寬度,帶有間隙

其實實現這個界面有很多中寫法,大家可以試試,比如說這樣寫:

  1. - (void)viewDidLoad {   
  2.  
  3.   
  4.  
  5.     ... 
  6.  
  7.   
  8.  
  9.     [purpleView mas_makeConstraints:^(MASConstraintMaker *make) { 
  10.  
  11.         make.left.equalTo(self.view).offset(margin); 
  12.  
  13.         make.bottom.equalTo(self.view).offset(-margin); 
  14.  
  15.         make.right.equalTo(orangeView.left).offset(-margin); 
  16.  
  17.         make.height.equalTo(height); 
  18.  
  19.         make.height.equalTo(orangeView); 
  20.  
  21.         make.width.equalTo(orangeView); 
  22.  
  23.         make.top.equalTo(orangeView); 
  24.  
  25.     }]; 
  26.  
  27.   
  28.  
  29.     [orangeView mas_makeConstraints:^(MASConstraintMaker *make) { 
  30.  
  31.         make.right.equalTo(self.view).offset(-margin); 
  32.  
  33.     }]; 
  34.  
  35.  

總結

其實 Masonry 的文檔已經很詳細了,建議大家去看文檔,我寫這個主要是為了做這個界面的 Tableview 上下拉阻尼效果而準備的

責任編輯:龐桂玉 來源: iOS大全
相關推薦

2021-09-09 06:55:43

Web剪輯視頻

2014-04-09 09:55:12

2009-08-11 11:42:50

Ruby使用心得

2015-07-23 09:40:24

爛代碼程序員

2021-01-19 12:16:10

CSS前端UI

2009-06-23 14:44:29

調用JavaFX

2024-08-29 08:13:58

2021-10-19 22:23:47

CSSBeautiful按鈕

2019-06-13 16:30:37

代碼Java編程語言

2021-01-25 06:37:06

Css前端CSS 特效

2022-11-03 16:28:00

Javascript平滑曲線

2022-02-21 07:02:16

CSSbeautiful按鈕

2022-08-10 16:08:38

鴻蒙CSS

2013-04-08 14:07:28

CSS

2020-11-04 13:55:06

CSS密室逃脫前端

2012-04-08 20:41:59

Android

2009-08-03 16:35:30

C#日期比較

2020-08-13 06:56:57

Javascript插件前端

2016-04-01 09:52:30

Autolayout約束動畫ios

2024-07-31 20:38:18

點贊
收藏

51CTO技術棧公眾號

国产精品538一区二区在线| 后入内射欧美99二区视频| 妖精视频一区二区三区| 91福利在线观看| 麻豆中文字幕在线观看| 丰满人妻一区二区| 久久激情久久| 日韩精品一区二区在线| 亚洲人成无码网站久久99热国产 | 欧美日韩精品免费看| 中文字幕一区二区三区免费看| 麻豆国产一区二区三区四区| 午夜精品福利视频网站| 亚洲激情图片| 亚洲av无码不卡| 午夜日韩视频| 日韩亚洲国产中文字幕欧美| 欧美精品一区免费| 成人无遮挡免费网站视频在线观看| 成人国产免费视频| 91青草视频久久| 亚洲天堂一区在线| 欧美人体视频| 欧美高清www午色夜在线视频| 亚洲精品蜜桃久久久久久| 在线国产情侣| 亚洲av无码一区二区三区性色| 国产高清一区| 亚洲欧美日韩网| 日本wwwxx| 亚洲色图综合| 欧美羞羞免费网站| 男人操女人免费软件| 午夜伦理大片视频在线观看| 国产精品视频在线看| 精品久久中出| 女人18毛片一区二区三区| 久久99热国产| 国产精品稀缺呦系列在线| 日韩免费视频一区二区视频在线观看| 99久久久久国产精品| 国产一区av在线| 日本在线视频www| 青青草av免费在线观看| 国产白丝精品91爽爽久久 | 色狠狠一区二区三区| 一本大道久久a久久综合婷婷| 99久久免费观看| 99在线视频观看| 最新国产成人在线观看| 中文字幕剧情在线观看一区| 成人性生交大片免费看午夜| 久久久精品综合| 久热这里只精品99re8久| 蜜桃视频污在线观看| 国产成人免费视频一区| 超碰国产精品久久国产精品99| 国产婷婷在线视频| 国产精品一区二区视频| αv一区二区三区| 精品免费久久久| 国产成人99久久亚洲综合精品| 92看片淫黄大片欧美看国产片 | 在线观看欧美日韩电影| 婷婷夜色潮精品综合在线| 蜜臀av无码一区二区三区| 2018av在线| 精品久久久久久中文字幕一区奶水| 久久精品国产sm调教网站演员| 热三久草你在线| 一本高清dvd不卡在线观看| 别急慢慢来1978如如2| 国产精品原创视频| 日韩午夜中文字幕| 给我免费观看片在线电影的| 香蕉视频一区| 最新中文字幕亚洲| 国产a免费视频| 99在线精品视频在线观看| 日本欧美黄网站| 一级特黄色大片| 国产精品一二三四| 国产一区二区免费在线观看| 青青草视频免费在线观看| 欧美高清在线一区| 喜爱夜蒲2在线| 在线手机中文字幕| 欧美日韩一区二区在线观看 | 女人抽搐喷水高潮国产精品| 亚洲欧美激情一区| 九九热视频在线免费观看| 国产综合婷婷| 国产精品扒开腿爽爽爽视频| 国产巨乳在线观看| 91色|porny| 一级做a爰片久久| 欧美1—12sexvideos| 日韩欧美在线免费观看| 91免费视频污| 自拍偷拍欧美一区| 欧美成人精品在线| 一级片免费在线播放| 国产精品亚洲一区二区三区妖精 | 影音先锋一区| 国产精品日韩欧美| 少妇荡乳情欲办公室456视频| 国产日产精品一区| 99在线精品免费视频| 亚洲成人a级片| 亚洲精品在线看| 日本a级片视频| 日本视频免费一区| 精品国产一区二区三区麻豆免费观看完整版 | 免费看黄色一级视频| 欧美极品aⅴ影院| 成人毛片一区二区| 成人自拍视频| 国产亚洲视频中文字幕视频| 精品国产免费观看| 丰满岳乱妇一区二区三区| 亚洲人成77777| 国产精品专区免费| 亚洲成avwww人| 亚洲国产成人va在线观看麻豆| av不卡一区| 美女福利视频一区| 中文有码在线播放| 久久久精品免费网站| 成人午夜精品久久久久久久蜜臀| 免费一级欧美在线大片| 日韩视频亚洲视频| 中文字幕人妻精品一区| 久久久午夜电影| 日韩国产欧美亚洲| 极品束缚调教一区二区网站 | 激情综合色播五月| 亚洲国产午夜伦理片大全在线观看网站| 国产精品论坛| 精品国产一区二区亚洲人成毛片| 婷婷伊人五月天| 九一久久久久久| 一区二区免费在线观看| av久久网站| 在线观看久久久久久| 色噜噜噜噜噜噜| 久久精品30| 欧美精品久久久| 日韩国产激情| 亚洲欧美综合图区| 无码日韩精品一区二区| 久久综合色婷婷| 欧美 激情 在线| 欧洲午夜精品| 神马久久桃色视频| 国产又爽又黄免费软件| 中文字幕一区日韩精品欧美| 亚洲视频第二页| 99久久亚洲精品蜜臀| 国产一区视频在线| 直接在线观看的三级网址| 3d成人h动漫网站入口| 加勒比婷婷色综合久久| 国产精品一区一区三区| 男人天堂a在线| 美女主播精品视频一二三四| 26uuu另类亚洲欧美日本老年| 完全免费av在线播放| 国产乱码精品一区二三赶尸艳谈| 亚洲第一福利网站| 日韩毛片一区二区三区| 国产日韩欧美a| 国产精品嫩草影院8vv8| 牛牛国产精品| 精品婷婷色一区二区三区蜜桃| 少妇视频在线观看| 尤物yw午夜国产精品视频| 国产精品久久久久久久一区二区 | 日韩中文字幕国产| 亚洲第一大网站| 日韩欧美高清视频| 久久成人小视频| 99麻豆久久久国产精品免费| 激情网站五月天| 亚洲91中文字幕无线码三区| 久久久噜噜噜久久久| 亚洲区小说区图片区| 欧美在线观看一区| 亚洲熟女www一区二区三区| www.激情成人| 日日干夜夜操s8| 亚洲大片av| 视频在线一区二区三区| 91小视频xxxx网站在线| 亚洲国产福利在线| 成人免费一级片| 一区二区在线观看免费视频播放| 日韩精品人妻中文字幕有码| 青青国产91久久久久久| 欧美黑人在线观看| 欧美日韩有码| 国内精品二区| 麻豆国产精品| 国产精品网站入口| 午夜激情电影在线播放| 久久人人爽亚洲精品天堂| 在线观看毛片av| 亚洲不卡av一区二区三区| 一本在线免费视频| jvid福利写真一区二区三区| 57pao国产成永久免费视频| 在线亚洲欧美| 国产内射老熟女aaaa| 成人羞羞视频在线看网址| 国产亚洲精品久久飘花| 亚洲精品自拍| 国产精品久久久久久久久久久新郎 | 丰满熟妇人妻中文字幕| 欧美日韩在线播| 国产中文字幕视频| 亚洲国产精品久久一线不卡| 成年人二级毛片| 中文在线免费一区三区高中清不卡 | 成人在线黄色| 日本亚洲欧美成人| 操人在线观看| 欧美激情在线观看| 亚洲爱情岛论坛永久| 欧美日韩在线一区二区| 欧美精品韩国精品| 精品久久久久久国产| 免费无码毛片一区二区app| 国产精品福利一区| 卡一卡二卡三在线观看| 久久综合久久鬼色中文字| 精品1卡二卡三卡四卡老狼| 国产一区在线观看视频| 亚洲va综合va国产va中文| 日本中文字幕一区二区视频| 欧美日韩在线中文| 国产免费成人| 日本毛片在线免费观看| 亚洲美女色禁图| 日韩a∨精品日韩在线观看| 亚洲激情综合| www.99热这里只有精品| 亚洲视频1区| 色欲av无码一区二区人妻| 一区二区国产精品| 日韩人妻精品无码一区二区三区| 国产一区二区三区久久久久久久久| 成人性生活视频免费看| 99国内精品| 亚洲成熟丰满熟妇高潮xxxxx| 丝瓜av网站精品一区二区| aⅴ在线免费观看| 日韩国产欧美视频| 天天干天天av| 国产二区国产一区在线观看| 亚洲av无一区二区三区久久| 国产不卡免费视频| 国产精品300页| 国产亚洲欧美一区在线观看| 精品人体无码一区二区三区| 1000部国产精品成人观看| 成熟的女同志hd| 性欧美疯狂xxxxbbbb| 亚洲GV成人无码久久精品 | 97国产精品视频| 成人免费视频| 三级精品视频久久久久| 动漫一区在线| 91av福利视频| 污片在线免费观看| 久久久亚洲欧洲日产国码aⅴ| 极品在线视频| 国产啪精品视频| 中文字幕日韩高清在线| 国产精品一区二区久久国产| 91成人福利社区| 国产日韩欧美亚洲一区| 亚洲伊人春色| 国产系列第一页| 亚洲免费精品| 日韩av在线中文| 成人免费毛片a| 中文字幕无码毛片免费看| 本田岬高潮一区二区三区| 无码人妻aⅴ一区二区三区69岛| 国产精品国产三级国产aⅴ无密码| 欧美日韩在线视频免费播放| 色综合色狠狠天天综合色| 国产精品毛片一区视频播| 亚洲成人黄色在线观看| 成人免费黄色网页| 久久久视频免费观看| 国产成人77亚洲精品www| 国产精品综合久久久久久| 日韩激情一区| 黄色一级视频片| 国产一区久久久| 西西444www无码大胆| 一区二区免费视频| 中文字幕在线观看精品| 亚洲国产精品网站| 黑人操亚洲女人| 日韩中文字幕视频在线| 中文av在线全新| 成人动漫视频在线观看完整版| 欧美亚洲高清| 内射国产内射夫妻免费频道| 国产呦萝稀缺另类资源| 午夜影院黄色片| 婷婷夜色潮精品综合在线| 国产女人爽到高潮a毛片| 亚洲香蕉成视频在线观看 | 亚洲综合激情另类小说区| 中文字幕一区二区三区四区免费看 | 色综合天天狠狠| 黄色av中文字幕| 欧美日本亚洲视频| 日本中文字幕视频一区| 欧美一区少妇| 亚洲深夜av| 中文成人无字幕乱码精品区| 樱花影视一区二区| 97人妻精品一区二区三区视频| 亚洲色图第一页| 天堂电影一区| 久久99精品久久久久久久青青日本 | 99国产一区二区三精品乱码| 亚洲国产成人精品综合99| 欧美日韩精品一区二区| 国产精品系列视频| 在线观看精品自拍私拍| 欧美成人精品三级网站| 欧美日韩一区在线观看视频| 亚洲一区二区成人| 午夜视频在线观看国产| 亚洲成人动漫一区| 男人天堂一区二区| 久久久久久综合网天天| 国产精品17p| 免费在线观看视频a| 成人激情黄色小说| 国产女同在线观看| 91久久精品一区二区三区| 天天在线女人的天堂视频| 97在线免费观看视频| 欧美激情极品| 国产午夜福利视频在线观看| 久久女同互慰一区二区三区| 日日摸天天添天天添破| 亚洲日韩中文字幕| 成人综合网站| 中文字幕第一页亚洲| 国产91精品入口| 国产情侣在线视频| 亚洲女同性videos| 成人网ww555视频免费看| 亚洲视频电影| 国产传媒欧美日韩成人| 国产网站在线看| 亚洲精品自在久久| 福利一区二区| 奇米777四色影视在线看| 不卡影院免费观看| 一二三区免费视频| 日韩亚洲综合在线| 亚洲精品在线国产| 日韩a在线播放| 国产精品国产三级国产专播品爱网 | 久草资源在线观看| av一区二区三区在线观看| 日韩亚洲国产精品| 九九九视频在线观看| 日韩一级大片在线观看| 老司机深夜福利在线观看| 日韩高清国产一区在线观看| 国产一区二区三区香蕉| 日本熟妇乱子伦xxxx| 国产一区二区三区在线观看视频| 亚洲精品tv| 18禁网站免费无遮挡无码中文| 国产丝袜美腿一区二区三区| 99久久久久成人国产免费| 91精品国产九九九久久久亚洲| 欧美偷拍综合| 在线精品视频播放| 欧洲一区在线观看| 美女尤物在线视频| 亚洲国产精品综合| 99久精品国产| 国产精品久久久久毛片| 91精品国产网站| 久久久人成影片免费观看| 香蕉网在线播放| 日韩免费在线观看| 草民电影神马电影一区二区| 国产中文字幕二区| 亚洲精品免费播放|