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

如何輕松實現iOS9多任務管理器效果(iCarousel高級教程)

移動開發 iOS
我忽然想起來之前的文章提到我最愛的UI控件iCarousel要實現類似這種效果其實是很簡單的 一時興起就花時間試驗了一下 效果還不錯 所以接下來我就介紹一下iCarousel的高級用法: 如何使用iCarousel的自定義方式來實現iOS9的多任務管理器效果

iOS9馬上要發布了 為了我司APP的兼容性問題 特意把手上的iOS Mac XCode都升級到了***的beta版 然后發現iOS9的多任務管理器風格大變 變成了下面這種樣子

我忽然想起來之前的文章提到我***的UI控件iCarousel要實現類似這種效果其實是很簡單的 一時興起就花時間試驗了一下 效果還不錯 所以接下來我就介紹一下iCarousel的高級用法: 如何使用iCarousel的自定義方式來實現iOS9的多任務管理器效果

模型

首先來看一下iOS9的多任務管理器究竟是什么樣子

 

然后我們簡單的來建個模 這個步驟很重要 將會影響我們之后的計算 首先我們把東西擺正

 

然后按比例用線分割一下

 

這里可以看到 如果我們以正中間的卡片(設定序號為0)為參照物的話 最右邊卡片(序號為1)的位移就是中心卡片寬度的4/5 最左邊的卡片(序號為-2)的位移就是中心卡片的寬度的2/5 注意:這兩個值的確定對我們非常重要

而大小*的縮放 就按照線性放大**就行了 由于計算很簡單 這里就不多贅述了

細心的人可能會注意到 其實iOS9中的中心卡片 并不是居中的 而是靠右的 那么我們再把整體布局調整一下

 

這樣就差不多是iOS9的樣子了

#p#

原理

接著我們來了解一下iCarousel的基本原理

iCarousel支持如下幾種內置顯示類型(沒用過的同學請務必使用pod try iCarousel來運行一下demo)

iCarouselTypeLinear

iCarouselTypeRotary

iCarouselTypeInvertedRotary

iCarouselTypeCylinder

iCarouselTypeInvertedCylinder

iCarouselTypeWheel

iCarouselTypeInvertedWheel

iCarouselTypeCoverFlow

iCarouselTypeCoverFlow2

iCarouselTypeTimeMachine

iCarouselTypeInvertedTimeMachine

具體效果圖可以在官方Github主頁上看到 不過這幾種類型雖然好 但是也無法滿足我們現在的需求 沒關系 iCarousel還支持自定義類型

iCarouselTypeCustom

這就是我們今天的主角

還是代碼說話 我們先配置一個簡單的iCarousel示例 并使用iCarouselTypeCustom作為其類型

  1. @interface ViewController () 
  2. iCarouselDelegate, 
  3. iCarouselDataSource 
  4. @property (nonatomic, strong) iCarousel *carousel; 
  5. @property (nonatomic, assign) CGSize cardSize; 
  6. @end 
  7. @implementation ViewController 
  8. - (void)viewDidLoad { 
  9. [super viewDidLoad]; 
  10.  
  11. CGFloat cardWidth = [UIScreen mainScreen].bounds.size.width*5.0f/7.0f; 
  12. self.cardSize = CGSizeMake(cardWidth, cardWidth*16.0f/9.0f); 
  13. self.view.backgroundColor = [UIColor blackColor]; 
  14.  
  15. self.carousel = [[iCarousel alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
  16. [self.view addSubview:self.carousel]; 
  17. self.carousel.delegate = self; 
  18. self.carousel.dataSource = self; 
  19. self.carousel.type = iCarouselTypeCustom; 
  20. self.carousel.bounceDistance = 0.2f; 
  21.  
  22. - (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
  23. return 15
  24. - (CGFloat)carouselItemWidth:(iCarousel *)carousel 
  25. return self.cardSize.width; 
  26. - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 
  27. UIView *cardView = view; 
  28.  
  29. if ( !cardView ) 
  30. cardView = [[UIView alloc] initWithFrame:CGRectMake(00, self.cardSize.width, self.cardSize.height)]; 
  31.  
  32. UIImageView *imageView = [[UIImageView alloc] initWithFrame:cardView.bounds]; 
  33. [cardView addSubview:imageView]; 
  34. imageView.contentMode = UIViewContentModeScaleAspectFill; 
  35. imageView.backgroundColor = [UIColor whiteColor]; 
  36.  
  37. cardView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:imageView.frame cornerRadius:5.0f].CGPath; 
  38. cardView.layer.shadowRadius = 3.0f; 
  39. cardView.layer.shadowColor = [UIColor blackColor].CGColor; 
  40. cardView.layer.shadowOpacity = 0.5f; 
  41. cardView.layer.shadowOffset = CGSizeMake(00); 
  42.  
  43. CAShapeLayer *layer = [CAShapeLayer layer]; 
  44. layer.frame = imageView.bounds; 
  45. layer.path = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:5.0f].CGPath; 
  46. imageView.layer.mask = layer; 
  47.  
  48. return cardView; 

當你運行這段代碼的時候哦 你會發現顯示出來是下面這個樣子的 并且劃也劃不動(掀桌:這是什么鬼~(/‵Д′)/~ ╧╧)

 

這是因為我們有個最重要的delegate方法沒有實現

  1. - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset 

這個函數也是整個iCarouselTypeCustom的靈魂所在

接下來我們要簡單的說一下iCarousel的原理

iCarousel并不是一個UIScrollView 也并沒有包含任何UIScrollView作為subView

iCarousel通過UIPanGestureRecognizer來計算和維護scrollOffset這個變量

iCarousel通過scrollOffset來驅動整個動畫過程

iCarousel本身并不會改變itemView的位置 而是靠修改itemView的layer.transform來實現位移和形變

可能文字說得不太清楚 我們還是通過代碼來看一下

  1. - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 
  2. UIView *cardView = view; 
  3.  
  4. if ( !cardView ) 
  5. cardView = [[UIView alloc] initWithFrame:CGRectMake(00, self.cardSize.width, self.cardSize.height)]; 
  6.  
  7. ... 
  8. ... 
  9.  
  10. //添加一個lbl 
  11. UILabel *lbl = [[UILabel alloc] initWithFrame:cardView.bounds]; 
  12. lbl.text = [@(index) stringValue]; 
  13. [cardView addSubview:lbl]; 
  14. lbl.font = [UIFont boldSystemFontOfSize:200]; 
  15. lbl.textAlignment = NSTextAlignmentCenter; 
  16.  
  17. return cardView; 
  18. - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform 
  19. NSLog(@"%f",offset); 
  20.  
  21. return transform; 

 

然后滑動的時候打出的日志是類似這樣的

  1. 2015-07-28 16:53:22.330 DemoTaskTray[1834:485052] -2.999739 
  2. 2015-07-28 16:53:22.331 DemoTaskTray[1834:4850522.000261 
  3. 2015-07-28 16:53:22.331 DemoTaskTray[1834:485052] -1.999739 
  4. 2015-07-28 16:53:22.331 DemoTaskTray[1834:4850523.000261 
  5. 2015-07-28 16:53:22.331 DemoTaskTray[1834:485052] -0.999739 
  6. 2015-07-28 16:53:22.332 DemoTaskTray[1834:4850520.000261 
  7. 2015-07-28 16:53:22.332 DemoTaskTray[1834:4850521.000261 
  8. 2015-07-28 16:53:22.346 DemoTaskTray[1834:485052] -3.000000 
  9. 2015-07-28 16:53:22.347 DemoTaskTray[1834:4850522.000000 
  10. 2015-07-28 16:53:22.347 DemoTaskTray[1834:485052] -2.000000 
  11. 2015-07-28 16:53:22.348 DemoTaskTray[1834:4850523.000000 
  12. 2015-07-28 16:53:22.348 DemoTaskTray[1834:485052] -1.000000 
  13. 2015-07-28 16:53:22.348 DemoTaskTray[1834:4850520.000000 
  14. 2015-07-28 16:53:22.348 DemoTaskTray[1834:4850521.000000 
  15. 2015-07-28 16:53:22.363 DemoTaskTray[1834:485052] -3.000000 
  16. 2015-07-28 16:53:22.363 DemoTaskTray[1834:4850522.000000 
  17. 2015-07-28 16:53:22.363 DemoTaskTray[1834:485052] -2.000000 
  18. 2015-07-28 16:53:22.363 DemoTaskTray[1834:4850523.000000 
  19. 2015-07-28 16:53:22.364 DemoTaskTray[1834:485052] -1.000000 
  20. 2015-07-28 16:53:22.364 DemoTaskTray[1834:4850520.000000 
  21. 2015-07-28 16:53:22.364 DemoTaskTray[1834:4850521.000000 

可以看到 所有的itemView都是居中并且重疊在一起的 我們滑動的時候并不會改變itemView的位置 但是這個offset是會改變的 而且可以看到 所有的offset的相鄰差值都為1.0

這就是iCarousel的一個重要的設計理念 iCarousel雖然跟UIScrollView一樣都各自會維護自己的scrollOffset 但是UIScrollView在滑動的時候改變的是自己的ViewPort 就是說 UIScrollView上的itemView是真正被放置到了他被設置的位置上 只是UIScrollView通過移動顯示的窗口 造成了滑動的感覺(如果不理解 請看這篇文章)

但是iCarousel并不是這樣 iCarousel會把所有的itemView都居中重疊放置在一起 當scrollOffset變化時 iCarousel會計算每個itemView的offset 并通過- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform這個函數來對每個itemView進行形變 通過形變來造成滑動的效果

這個非常大膽和另類的想法著實很奇妙! 可能我解釋得不夠好(盡力了~~) 還是通過代碼來解釋比較好

#p#

我們修改一下函數的實現

  1. - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform 
  2. NSLog(@"%f",offset); 
  3.  
  4. return CATransform3DTranslate(transform, offset * self.cardSize.width, 00); 

效果如下

 

[[144239]]

我們可以看到 已經可以滑動了 而且這個效果 就是類似iCarouselTypeLinear的效果

沒錯 其實iCarousel所有的內置類型也都是通過這種方式來實現的 只是分別根據offset進行了不同的形變 就造成了各種不同的效果

要說明的是 函數僅提供offset作為參數 并沒有提供index來指明對應的是哪一個itemView 這樣的好處是可以讓人只關注于具體的形變計算 而無需計算與currentItemView之間的距離之類的

注意的是offset是元單位(就是說 offset是不包含寬度的 僅僅是用來說明itemView的偏移系數) 下圖簡單說明了一下

當沒有滑動的時候 offset是這樣的

 

當滑動的時候 offset是這樣的

 

怎么樣 知道了原理之后 是不是有種躍躍欲試的感覺? 接下來我們就回到主題上 看看如何一步步實現我們想要的效果

計算

通過剛才原理的介紹 可以知道 接下來的重點就是關于offset的計算

我們首先來確定一下函數的曲線圖 通過觀察iOS9的實例效果我們可以知道 itemView從左向右滑的時候是越來越快的

所以這個曲線大概是這個樣子的

 

考驗你高中數學知識的時候到了 怎么找到這種函數?

有種叫直角雙曲線的函數 大概公式是這個樣子

其曲線圖是這樣的

 

可以看到 位于第二象限的曲線就是我們要的樣子 但是我們還要調整一下才能得到最終的結果

由于offset為0的時候 本身是不形變的 所以可以知道曲線是過原點(0,0)的 那么我們可以得到函數的一般式

而在文章開頭我們得到了這樣兩組數據

最右邊卡片(序號為1)的位移就是中心卡片寬度的4/5

最左邊的卡片(序號為-2)的位移就是中心卡片的寬度的2/5

那么代入上面的一般式中 我們可以得到兩個公式

 

計算可以得到

a=5/4

b=5/8

然后我們就可以得到我們最終想要的公式

看看曲線圖

#p#

然后我們修改一下程序代碼(這段代碼其實就是本文的關鍵所在)

  1. - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform 
  2. CGFloat scale = [self scaleByOffset:offset]; 
  3. CGFloat translation = [self translationByOffset:offset]; 
  4.  
  5. return CATransform3DScale(CATransform3DTranslate(transform, translation * self.cardSize.width, 00), scale, scale, 1.0f); 
  6. - (void)carouselDidScroll:(iCarousel *)carousel 
  7. for ( UIView *view in carousel.visibleItemViews) 
  8. CGFloat offset = [carousel offsetForItemAtIndex:[carousel indexOfItemView:view]]; 
  9.  
  10. if ( offset < -3.0 ) 
  11. view.alpha = 0.0f; 
  12. else if ( offset < -2.0f) 
  13. view.alpha = offset + 3.0f; 
  14. else 
  15. view.alpha = 1.0f; 
  16. //形變是線性的就ok了 
  17. - (CGFloat)scaleByOffset:(CGFloat)offset 
  18. return offset*0.04f + 1.0f; 
  19. //位移通過得到的公式來計算 
  20. - (CGFloat)translationByOffset:(CGFloat)offset 
  21. CGFloat z = 5.0f/4.0f; 
  22. CGFloat n = 5.0f/8.0f; 
  23.  
  24. //z/n是臨界值 >=這個值時 我們就把itemView放到比較遠的地方不讓他顯示在屏幕上就可以了 
  25. if ( offset >= z/n ) 
  26. return 2.0f; 
  27.  
  28. return 1/(z-n*offset)-1/z; 

再看看效果

 

看上去已經是我們想要的效果了

不過 滑動一下就會發現問題

 

原來雖然itemView的大小和位移都按照我們的預期變化了 但是層級出現了問題 那么iCarousel是如何調整itemView的層級的呢? 查看源碼我們可以知道

  1. NSComparisonResult compareViewDepth(UIView *view1, UIView *view2, iCarousel *self) 
  2. //compare depths 
  3. CATransform3D t1 = view1.superview.layer.transform; 
  4. CATransform3D t2 = view2.superview.layer.transform; 
  5. CGFloat z1 = t1.m13 + t1.m23 + t1.m33 + t1.m43; 
  6. CGFloat z2 = t2.m13 + t2.m23 + t2.m33 + t2.m43; 
  7. CGFloat difference = z1 - z2; 
  8.  
  9. //if depths are equal, compare distance from current view 
  10. if (difference == 0.0
  11. CATransform3D t3 = [self currentItemView].superview.layer.transform; 
  12. if (self.vertical) 
  13. CGFloat y1 = t1.m12 + t1.m22 + t1.m32 + t1.m42; 
  14. CGFloat y2 = t2.m12 + t2.m22 + t2.m32 + t2.m42; 
  15. CGFloat y3 = t3.m12 + t3.m22 + t3.m32 + t3.m42; 
  16. difference = fabs(y2 - y3) - fabs(y1 - y3); 
  17. else 
  18. CGFloat x1 = t1.m11 + t1.m21 + t1.m31 + t1.m41; 
  19. CGFloat x2 = t2.m11 + t2.m21 + t2.m31 + t2.m41; 
  20. CGFloat x3 = t3.m11 + t3.m21 + t3.m31 + t3.m41; 
  21. difference = fabs(x2 - x3) - fabs(x1 - x3); 
  22. return (difference < 0.0)? NSOrderedAscending: NSOrderedDescending; 
  23. - (void)depthSortViews 
  24. for (UIView *view in [[_itemViews allValues] sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))compareViewDepth context:(__bridge void *)self]) 
  25. [_contentView bringSubviewToFront:view.superview]; 

主要就是這個compareViewDepth的比較函數起作用 而這個函數中比較的就是CATransform3D的各個屬性值

我們來看一下CATransform3D的各個屬性各代表什么

  1. struct CATransform3D 
  2. CGFloat m11(x縮放), m12(y切變), m13(旋轉), m14(); 
  3. CGFloat m21(x切變), m22(y縮放), m23(), m24(); 
  4. CGFloat m31(旋轉), m32( ), m33(), m34(透視); 
  5. CGFloat m41(x平移), m42(y平移), m43(z平移), m44(); 
  6. }; 

而所有CATransform3D開頭的函數(比如CATransform3DScale CATransform3DTranslate) 改變的也就是這些值而已

回到整體 我們發現這個函數先比較的是t1.m13 + t1.m23 + t1.m33 + t1.m43; 而m13代表的是旋轉 m23和m33暫時并沒有含義 而m43代表的是z平移 那么我們只要改變m43就可以了 而改變m43最簡單的辦法就是

  1. CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx,CGFloat ty, CGFloat tz) 

***一個參數就是用來改變m43的

那么我們把之前iCarousel的delegate方法稍微改動一下 將當前的offset設置給***一個參數即可(因為offset就是按順序傳進來的)

  1. return CATransform3DScale(CATransform3DTranslate(transform, translation * self.cardSize.width, 0, offset), scale, scale, 1.0f); 

再看看效果

Bang!

我們已經得到了一個簡單的copycat

小結

文中的demo可以在這里找到

可以看到 使用iCarousel 我們僅用不到100行就實現了一個非常不錯的效果(關鍵代碼不到50行) 而無需做很多額外的工作(當然大家就不要揪細節了 比如以漸隱代替模糊 ***一張卡片居中等問題 畢竟這不是個輪子 只是教大家一種方法)

如果大家真正讀懂了這篇文章(可能我寫得不是很清楚 建議看demo 同時讀iCarousel的源碼來理解) 那么只要遇到類似卡片滑動的組件 都可以輕松應對了

說到這里 我個人是非常不喜歡重復造輪子的 能用最少的代碼達到所需的要求是我一直以來的準則 而且很多經典的輪子庫(比如iCarousel)也值得你去深入探索和學習 了解作者的想法和思路(站在巨人的肩膀)是一種非常不錯的學習方法和開闊視野的途徑

另外 文中所用到的數學公式曲線圖生成網站是Desmos Graphing Calculator(從@KITTEN-YANG那瞄到的) 數學公式生成網站是Sciweaver(直接把前者的公式復制到后者的輸入框里就可以了 因為前者復制出來就是latex格式的公式了) 有需要的同學可以研究一下如何使用 (打算研究一下Matlab的用法 可能更方便)

責任編輯:chenqingxiang 來源: 里脊串的開發隨筆
相關推薦

2015-06-17 10:41:50

2020-10-12 09:00:00

Firefox任務管理器瀏覽器

2015-07-14 16:15:22

2015-08-24 09:19:05

ios9split scree

2011-09-06 17:47:21

瀏覽器單窗口多任務

2015-07-16 12:59:19

IOS9UIDynamics

2015-10-16 14:27:29

iOS9collectionV特性

2014-05-09 12:59:26

iOS移動互聯網

2020-03-12 18:34:30

Windows 10Windows任務管理器

2012-04-20 14:44:11

JavaScript

2011-06-30 09:31:54

Chrome OS

2023-11-24 08:21:08

下載任務管理器

2015-09-16 09:55:12

ios9學習UIKit Dynam

2015-08-24 09:24:21

ios學習contacts fr

2015-07-02 17:32:28

iOS 9蘋果

2015-09-25 09:44:24

ios9MapkitTrans

2015-08-20 09:00:23

ios9api

2009-05-27 08:48:06

Windows 7微軟操作系統

2021-10-13 09:33:26

Python 多任務進程

2015-10-29 11:13:23

iOS9使用框
點贊
收藏

51CTO技術棧公眾號

久久国产精品久久w女人spa| 欧美黑白配在线| 一区二区三区毛片| 国产综合精品一区二区三区| 国产精品高清无码| 欧美一区激情| 国产网站欧美日韩免费精品在线观看| 色国产在线视频| 国产蜜臀av在线播放| 久久九九影视网| 99高清视频有精品视频| 日韩色图在线观看| 亚洲在线久久| 亚洲女人天堂色在线7777| 亚洲一区二区三区观看| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 中文字幕亚洲欧美日韩2019| 少妇伦子伦精品无吗| 亚洲成av在线| 午夜精品免费在线观看| 欧美aaa在线观看| 青青九九免费视频在线| 粉嫩绯色av一区二区在线观看| 国产成人精品国内自产拍免费看 | 人妻激情偷乱频一区二区三区 | 欧美性xxxxxxxx| 性欧美大战久久久久久久| 国产午夜精品久久久久免费视| 久久网这里都是精品| 成人av免费电影| 国产手机精品视频| 青娱乐精品在线视频| 91chinesevideo永久地址| 欧美激情国产精品免费| 日产精品一区二区| 亚洲天堂网站在线观看视频| 欧美夫妇交换xxx| 视频一区日韩精品| 欧美美女网站色| 亚洲少妇久久久| 韩日精品一区二区| 欧美日韩一区免费| 免费看黄在线看| 丰满的护士2在线观看高清| 亚洲老司机在线| 中文字幕剧情在线观看一区| 五月天婷婷在线视频| 久久久久久久久久久久久女国产乱| 国产一区免费观看| 蜜桃av中文字幕| 成人黄色av网站在线| 成人免费91在线看| 国模私拍视频在线| 97久久超碰国产精品| 激情五月综合色婷婷一区二区| 亚洲福利在线观看视频| 风流少妇一区二区| 国产综合18久久久久久| 日韩av资源站| 亚洲国产精品成人久久综合一区 | 97香蕉碰碰人妻国产欧美| 国产一区二区三区亚洲| 亚洲精品99久久久久中文字幕| 国产视频久久久久久| 免费萌白酱国产一区二区三区| 亚洲激情小视频| 魔女鞋交玉足榨精调教| 国产精品一国产精品| 最新日韩中文字幕| 欧美三级日本三级| 亚洲精品123区| 日产精品99久久久久久| 中文字幕在线2018| 国产乱人伦偷精品视频免下载| 91精品久久久久久蜜桃| 亚洲女同志亚洲女同女播放| 26uuu国产日韩综合| 日韩三级电影免费观看| 免费在线观看黄| 亚洲电影在线播放| 黄色片视频在线播放| 成人午夜毛片| 日韩免费观看高清完整版| 黄色免费看视频| 精品国产一级毛片| 欧美另类69精品久久久久9999| 久久久久亚洲av无码专区| 亚洲少妇自拍| 成人黄色大片在线免费观看| 亚洲国产成人一区二区| 久久综合狠狠综合久久激情| 一区二区三区四区视频在线| av影片在线| 欧美午夜电影网| 秘密基地免费观看完整版中文| 香蕉久久精品| 毛片精品免费在线观看| 亚洲日本视频在线观看| 精品一区二区综合| 久久久福利视频| 麻豆影院在线观看| 欧美视频一二三| 中文字幕亚洲影院| 亚洲精品小区久久久久久| 久久精品青青大伊人av| 久久久久久少妇| 国产一区美女在线| 欧美在线播放一区二区| 黄网站在线观| 欧美日产在线观看| 亚洲欧洲久久久| 激情欧美一区| 91九色视频在线| 国产经典自拍视频在线观看| 亚洲图片欧美色图| 久久人人爽av| 国产日韩视频在线| 97免费中文视频在线观看| 国产女人18毛片水真多| 欧美国产在线观看| 欧美 日本 亚洲| 日韩区一区二| 两个人的视频www国产精品| 久久国产香蕉视频| 久久九九久久九九| 亚洲熟妇av日韩熟妇在线| 77成人影视| 久久久av电影| 一级黄色大片免费观看| 国产三级一区二区| 国产精品69页| 九九久久精品| 欧美制服第一页| 香蕉视频911| 亚洲成人第一页| youjizz.com日本| 欧美激情自拍| 91亚洲精品丁香在线观看| 麻豆tv在线| 欧美日韩精品一区二区天天拍小说 | 成年人视频免费| 国产亚洲一二三区| 国产v亚洲v天堂无码久久久| 国产成人三级| 国产成人精品久久亚洲高清不卡| 日韩一二三四| 色综合久久天天综合网| 精品人妻互换一区二区三区 | 国产三级三级看三级| 国产精品入口久久| 国产精品www色诱视频| 国产在线视频你懂得| 91福利社在线观看| 亚洲av成人无码久久精品| 水蜜桃久久夜色精品一区的特点| 欧美亚洲丝袜| 久久精品国产精品亚洲毛片| yellow中文字幕久久| 国产老妇伦国产熟女老妇视频| 综合电影一区二区三区| 欧美日韩久久婷婷| 欧美日韩少妇| 久久久福利视频| 成人av色网站| 久久成年人免费电影| 亚洲精品久久久蜜桃动漫| 亚洲小说欧美激情另类| 亚洲国产第一区| 日韩不卡一二三区| 日韩video| 国产精品极品国产中出| 日韩av免费网站| 黄视频在线观看网站| 精品国产免费人成在线观看| av黄色在线看| 国产精品久久一级| 91人人澡人人爽| 久久精品人人做人人爽电影蜜月| 亚洲精品国产一区| 97色成人综合网站| 国产91在线播放精品91| 国产原创在线观看| 日韩精品电影网| 一级淫片免费看| 天天综合日日夜夜精品| 97在线观看免费视频| 国产精品18久久久久久久久久久久 | 日本黄色网址大全| 极品尤物av久久免费看| 九九热只有这里有精品| 精品国产一区二区三区四区| 91传媒视频免费| 欧美理论影院| 色综合男人天堂| yourporn在线观看视频| 精品久久久网站| 中文字幕人妻一区二区在线视频| 一区二区成人在线视频 | 国产欧美日韩精品一区二区免费| 91免费在线视频网站| 色戒汤唯在线观看| 欧美男插女视频| av电影在线观看| 亚洲国语精品自产拍在线观看| 在线播放成人av| 精品国产31久久久久久| 五月天色婷婷丁香| 国产亚洲午夜高清国产拍精品| 丰满人妻一区二区三区免费视频棣| 水蜜桃久久夜色精品一区的特点| 阿v天堂2018| 91精品成人| 午夜一区二区三区| 欧美一级三级| 国产精品v欧美精品v日韩| 欧美亚洲二区| 国产精品久久久久久av福利软件| av岛国在线| 欧美高清自拍一区| 久久久久久国产精品免费无遮挡| 亚洲色图欧美制服丝袜另类第一页| www.天堂在线| 欧美一区二区福利在线| 最近中文字幕免费在线观看| 欧美日韩在线视频观看| 精品一区二区三区人妻| 亚洲另类一区二区| 久草视频手机在线| 中文字幕一区日韩精品欧美| 最近中文字幕在线mv视频在线 | 精品精品国产高清a毛片牛牛 | 综合国产在线观看| 国产福利在线看| 亚洲日本中文字幕| 男人av在线| 亚洲欧美日韩高清| 三级做a全过程在线观看| 欧美精品一区二区三| 亚洲高清视频在线播放| 精品噜噜噜噜久久久久久久久试看| 国产区精品在线| 欧美日韩情趣电影| 中文字幕乱码中文字幕| 欧洲精品在线观看| 嫩草影院一区二区三区| 欧美在线观看禁18| 中文天堂在线视频| 欧美日韩精品一区视频| 国产精品久久久久精| 538prom精品视频线放| 一本一道精品欧美中文字幕| 91精品国产91热久久久做人人 | 日韩精品有码在线观看| 亚洲 小说区 图片区 都市| 亚洲精品视频网上网址在线观看| 日韩精品一二| 伊人伊成久久人综合网站| www 日韩| 大胆欧美人体视频| h片精品在线观看| 欧美中文字幕精品| 国产精品第一| 亚洲一区二区三区777| 一区二区三区国产好| 久久96国产精品久久99软件| 久久综合影院| 亚洲第一精品区| 在线看片一区| 人妻无码视频一区二区三区| 黑人巨大精品欧美一区| 四虎成人免费视频| 久久久夜色精品亚洲| 潮喷失禁大喷水aⅴ无码| 亚洲色图视频网| 日韩福利片在线观看| 91黄色免费网站| 国产精品一级二级| 日韩高清欧美高清| 在线视频婷婷| 久久免费精品视频| 人人鲁人人莫人人爱精品| 91久久在线播放| 青草久久视频| 伊人情人网综合| 一区二区三区国产盗摄| 国产喷水theporn| 成人激情午夜影院| 亚洲图片第一页| 亚洲香肠在线观看| 中文字幕人妻丝袜乱一区三区| 精品久久久久久久久久久久久久久| 蜜桃视频在线观看网站| 美女久久久久久久久久久| 欧美a级在线观看| 亚洲一区中文字幕| 激情五月综合| 97超碰在线人人| 久久国产精品一区二区| 一区二区不卡免费视频| 亚洲私人黄色宅男| 无码人妻丰满熟妇区五十路| 日韩色在线观看| 国产片在线观看| 91国产精品91| 久久免费福利| 台湾成人av| 影音先锋中文字幕一区二区| 波多结衣在线观看| 2023国产一二三区日本精品2022| 日本一级二级视频| 欧美日韩一区二区三区高清| 香蕉视频网站在线| 欧美丰满片xxx777| 99精品美女视频在线观看热舞| 欧美亚洲爱爱另类综合| 亚洲第一伊人| 欧美老女人bb| 亚洲视频一区二区在线观看| 手机av免费观看| 精品亚洲夜色av98在线观看| 欧美性爽视频| 亚洲字幕一区二区| 久久国产成人精品| 在线视频日韩一区 | 看一级黄色录像| 麻豆91精品视频| 免费看黄色av| 色就色 综合激情| 邻居大乳一区二区三区| 亚洲97在线观看| 91久久偷偷做嫩草影院电| 亚洲AV无码成人精品一区| 美女任你摸久久| 女人十八毛片嫩草av| 色成年激情久久综合| 日本亚洲一区| 日本高清久久天堂| 在线日本制服中文欧美| 久久久精品在线视频| 91免费在线播放| 天堂网中文字幕| 亚洲男人天天操| 久久亚洲精品爱爱| 婷婷久久五月天| 久久国内精品自在自线400部| 纪美影视在线观看电视版使用方法| 日本韩国精品一区二区在线观看| 男女视频在线观看免费| 日韩av电影在线免费播放| 国产探花一区| 日韩在线不卡一区| 亚洲免费在线视频一区 二区| 国产内射老熟女aaaa∵| 欧美激情videoshd| 卡通动漫国产精品| 免费成人午夜视频| 久久精品一区二区三区av| 最近中文字幕在线视频| xx视频.9999.com| 日韩精品视频中文字幕| 国产资源在线免费观看| 99视频一区二区| 午夜一区二区三区四区| 久久影视电视剧免费网站| 试看120秒一区二区三区| 日本午夜激情视频| 久久精品男人的天堂| 中文字幕在线观看视频一区| 久久视频免费观看| 久久av国产紧身裤| 国产免费人做人爱午夜视频| 国产精品福利在线播放| 亚洲国产www| 国产脚交av在线一区二区| 亚洲澳门在线| 日韩av手机在线播放| 欧美在线观看你懂的| 亚洲丝袜一区| 欧美一区二区三区四区在线观看地址 | 欧美高清视频在线观看mv| 亚洲丝袜在线观看| 欧美日韩中文字幕在线视频| 在线免费观看黄| 国产伦精品一区二区三区高清| 久久中文精品| 99视频只有精品| 亚洲欧美福利视频| 亚洲超碰在线观看| 日本一极黄色片| 一区二区三区在线免费视频| 欧美日韩在线精品一区二区三区激情综| 国产精品自产拍在线观| 亚洲黄页一区| 二区三区四区视频| 亚洲精品视频久久| 亚洲日本va午夜在线电影| 美女喷白浆视频| 亚洲成国产人片在线观看| 麻豆网在线观看| 蜜桃麻豆www久久国产精品|