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

針尖上帶著腳鐐跳舞的widget

移動開發 iOS
自從iOS 10蘋果給widget做了一次大改版后,很多人都開發了自己的widget。網上也有很多教程,來告訴你怎么快速開發一個widget。我的這篇文章也不會重復那些簡單的創建extension添加證書之類的東西。我們要深入地看一下widget到底應該做成什么樣子。

自從iOS 10蘋果給widget做了一次大改版后,很多人都開發了自己的widget。網上也有很多教程,來告訴你怎么快速開發一個widget。我的這篇文章也不會重復那些簡單的創建extension添加證書之類的東西。我們要深入地看一下widget到底應該做成什么樣子。

你真的了解widget的尺寸嗎

首先widget由兩種狀態

  1. typedef NS_ENUM(NSInteger, NCWidgetDisplayMode) { 
  2.     NCWidgetDisplayModeCompact, // Fixed height 
  3.     NCWidgetDisplayModeExpanded, // Variable height 
  4.  

大部分網上的教程都會告訴你,如果你想改widget的高度,都是在下面這個方法中這么寫

  1. - (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize { 
  2.     if (activeDisplayMode == NCWidgetDisplayModeCompact) { 
  3.         self.preferredContentSize = CGSizeMake(maxSize.width, 110); 
  4.     } else { 
  5.         self.preferredContentSize = CGSizeMake(maxSize.width, 300); 
  6.     } 
  7.  

這個意思就算折疊狀態110,展開狀態300。因為如果你折疊狀態就算寫120,也一樣是110的高度,這個高度不會變化。展開狀態下,當然要取比maxSize.height小的一個值。那么maxSize這個值是多少?

然而我要告訴你,高度根本就不是一個固定值!并且可以認為是無規律的!!!

因為,整個widget的maxSize限制的***規則是根據系統字體大小變化。

無論是折疊狀態還是展開狀態。也就是說,直接寫死110是錯誤的。因為默認系統字體下,的確折疊高度是110。但是一旦系統字體改為最小,widget折疊狀態的高度僅為95,而在系統字體***的情況下,widget折疊狀態的高度是140。而系統字體大小一共有7檔。也就是說,折疊高度和字體大小相關,但不是線性相關。

可以驗證,折疊的高度是95-100-105-110-120-135-140這七檔。且不可修改。

光折疊高度也就算了。展開***高度也是一個非線性相關的高度(并且是在折疊高度統一的情況下)。

以下對于展開高度的討論,都固定系統字體大小為默認大小,控制變量(最終得出的尺寸結果,理論上乘以7就是所有可能的高度)。

首先就是機型的差異,當然手機屏幕越小,展開***高度也就越小,這個其實尚可以接受。大不了我們按照最小屏幕的情況開發唄。然而,我要告訴你,widget***高度還是會變!

這個是我們最常見的widget入口,就是屏幕左滑的Today頁 

 

 

 

然而其實還有另外一個入口,就是下拉通知頁的左滑,也會有入口 

 

 

 

這兩個入口進來,widget展開狀態的***高度,后者會比前者小很多!

打斷點看maxSize很容易就可以驗證,iPhone7默認字體大小,展開狀態下。***個入口的maxSize.height是616,而另外一個情況下,這個數值變成了528。

此時真想問一聲蘋果爸爸,這到底是想搞啥?

其實還有第三個入口,就是3D touch app圖標,也會出現widget,但是那個只有折疊狀態 

 

 

 

也就是說,目前來看,折疊狀態是7種尺寸,而每種屏幕大小的展開狀態下就是7*2種,也就是說,4吋,4.7吋,5.5吋這三種主流屏幕尺寸都要適配的話,展開狀態是7*2*3=42種尺寸。

看到這你可以說,沒關系,我就取4吋設備最小的高度。這個就要看你的設計師能不能同意了。

你以為完了嗎?別說iPad呢,那個咱們就不考慮了,iPhone能放下,iPad當然也放得下。

但是你真的想不到,5.5吋也就是Plus機型的橫屏狀態,也是不同尺寸的。Plus橫屏下的展開模式,***個入口***高度僅有352,第二入口的***高度僅264……

意味著什么,***字體情況下的折疊狀態都有140高度,展開還不到折疊高度的兩倍。

如果你對widget的尺寸適配感興趣,并且有解決方案,請聯系我,必有重謝。

有沒有感覺被閃瞎了

你如果添加了很多個widget就會發現,就單單在列表里上下滑動都能把眼睛閃瞎。 

 

 

 

Widget 自身的更新機制,是進入到 Widget 后,先執行 viewDidLoad 方法,然后是 viewWillAppear 方法。

但是經測驗,每當某一個Widget在上下滑動,滑出屏幕后,再把這個widget劃回來,就走上面那一套刷新機制。

由于以上特性,更新代碼***寫在 viewWillAppear 方法里面,對于更新時效性特別強的,比如天氣類 app,這種***就是在該方法里面添加一個 NSTimer 定時進行刷新,在 viewWillDisAppear 方法中 進行 取消NSTimer invalidate定時更新即可。

或者,你自己實現緩存,一樣可以優化。判斷如果請求來的數據和當前數據內容一致,那么就不進行刷新列表操作。

知乎、得到 等等好多app的 Widget,只要走 viewDidLoad 方法就會閃一下,因為每次Widget加載請求的數據后會進行替換造成的。

至于為什么只要不再視線范圍再回來就刷新,我猜測,是因為內存問題。

widget對內存的要求之高令人發指,你的widget中一旦有gif,基本上就完全沒有辦法顯示,過一會就會顯示無法載入。不僅如此,反復來回滾動widget頁面,以不斷刷新也會導致占用內存升高,不太清楚這個是不是蘋果的BUG,但是我自己的測試中,盡量都讓單個的widget內存占用小于15M,這樣被殺掉內存的機會很小。

所以,我在開發的時候,gif圖都只取***幀。并且盡可能不主動刷新UI,保持widget內存處于一個較低的水平。

而且由于extension實際上不能直接使用主target中的那些框架,所以,我也寫了一些最基本的功能組件。

首先當然是緩存系統,圖片緩存尤其關鍵,因為widget這種特性,會反復刷新,如果沒有緩存系統,是非常大的浪費。首先就是圖片緩存: 

  1. #import "QDTEImageCache.h" 
  2. #import <CommonCrypto/CommonDigest.h> 
  3.  
  4. @implementation QDTEImageCache 
  5.  
  6. + (instancetype)shareImageCache { 
  7.     static dispatch_once_t once; 
  8.     static id instance; 
  9.     dispatch_once(&once, ^{ 
  10.         instance = [self new]; 
  11.     }); 
  12.     return instance; 
  13.  
  14. - (BOOL)isExistCacheForKey:(NSString *)key { 
  15.     key = [self cachedFileNameForKey:key]; 
  16.     NSString *filePath = [[self getCachePath] stringByAppendingPathComponent:key]; 
  17.     return [[NSFileManager defaultManager] fileExistsAtPath:filePath]; 
  18.  
  19. - (NSData *)getImageDataForKey:(NSString *)key { 
  20.      
  21.     if ([self isExistCacheForKey:key]) { 
  22.         return [NSData dataWithContentsOfFile:[[self getCachePath] stringByAppendingPathComponent:[self cachedFileNameForKey:key]]]; 
  23.     } 
  24.     return nil; 
  25.  
  26. - (void)saveToCacheWithData:(NSData *)data forKey:(NSString *)key { 
  27.     key = [self cachedFileNameForKey:key]; 
  28.     NSString *filePath = [[self getCachePath] stringByAppendingPathComponent:key]; 
  29.      
  30.     dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
  31.         [data writeToFile:filePath atomically:YES]; 
  32.     }); 
  33.      
  34.  
  35. - (NSString *)getCachePath { 
  36.     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
  37.     NSString *containerPath = [[fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.com.XXXXXXX"] path]; 
  38.      
  39.     NSString *path = [containerPath stringByAppendingString:@"/Caches/"]; 
  40.     if (![fileMgr fileExistsAtPath:path]) { 
  41.         BOOL res = [fileMgr createDirectoryAtPath:path 
  42.                       withIntermediateDirectories:YES 
  43.                                        attributes:nil 
  44.                                             error:nil]; 
  45.         if (!res) { 
  46.             return nil; 
  47.         } 
  48.     } 
  49.      
  50.     return path; 
  51.  
  52. - (NSString *)cachedFileNameForKey:(NSString *)key { 
  53.     const char *str = [key UTF8String]; 
  54.     if (str == NULL) { 
  55.         str = ""
  56.     } 
  57.     unsigned char r[CC_MD5_DIGEST_LENGTH]; 
  58.     CC_MD5(str, (CC_LONG)strlen(str), r); 
  59.     NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@"
  60.                           r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], 
  61.                           r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]]; 
  62.      
  63.     return filename; 
  64. @end  

一個非常基礎的圖片緩存,同時配合文件管理類, 來管理接口返回的response:

控制器發出的請求,收到response的data時做一次緩存并比對

  1. - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 
  2.     [self.jsonData appendData:data]; 
  3.     NSDictionary *dic = [[NSJSONSerialization JSONObjectWithData:self.jsonData options:NSJSONReadingMutableContainers error:nil] copy]; 
  4.      
  5.     if (dic == nil) return
  6.      
  7.     self.jsonData = nil; 
  8.      
  9.     NSDictionary *metaDic = [dic valueForKey:@"meta"]; 
  10.      
  11.     if ([[metaDic valueForKey:@"status"] integerValue] == 200) { 
  12.          
  13.         NSArray *papers = [[dic valueForKey:@"response"] valueForKey:@"papers"]; 
  14.         NSDictionary *paperDic = [papers firstObject]; 
  15.          
  16.         [_fileMgr saveToCacheWithRawDic:paperDic]; 
  17.          
  18.         QDTELabModel *labModle = [self modelFromRawDic:paperDic]; 
  19.          
  20.         if (labModle.article_id.longValue == self.labModel.article_id.longValue) return
  21.          
  22.         self.labModel = labModle; 
  23.         dispatch_async(dispatch_get_main_queue(), ^{ 
  24.             for (UIView *subView in self.view.subviews) { 
  25.                 [subView removeFromSuperview]; 
  26.             } 
  27.             [self refreshContentView]; 
  28.         }); 
  29.     } 
  30.  

文件管理類用來儲存 

  1. #import "QDTEFileManager.h" 
  2.  
  3. @implementation QDTEFileManager 
  4. + (instancetype)shareManager { 
  5.     static dispatch_once_t once; 
  6.     static id instance; 
  7.     dispatch_once(&once, ^{ 
  8.         instance = [self new]; 
  9.     }); 
  10.     return instance; 
  11.  
  12. - (NSDictionary *)getUserinfo { 
  13.     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
  14.     NSString *containerPath = [[fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.com.XXXXXX"] path]; 
  15.      
  16.     NSString *filePath = [containerPath stringByAppendingPathComponent:@"QDUserinfo.json"]; 
  17.     if ([fileMgr fileExistsAtPath:filePath]) { 
  18.         NSError *error; 
  19.         return [[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filePath] options:NSJSONReadingMutableContainers error:&error] copy]; 
  20.     } 
  21.     return nil; 
  22.  
  23. - (NSDictionary *)getRawDicFromCache { 
  24.     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
  25.     NSString *containerPath = [[fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.com.XXXXXX"] path]; 
  26.     NSString *path = [containerPath stringByAppendingString:@"/Caches/"]; 
  27.     NSString *filePath = [path stringByAppendingPathComponent:@"QDLabCache.json"]; 
  28.      
  29.     if ([fileMgr fileExistsAtPath:filePath]) { 
  30.         NSError *error; 
  31.         NSDictionary *rawDic = [[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filePath] options:NSJSONReadingMutableContainers error:&error] copy]; 
  32.         return rawDic; 
  33.     } 
  34.     return nil; 
  35.  
  36. - (void)saveToCacheWithRawDic:(NSDictionary *)rawDic { 
  37.     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
  38.     NSString *containerPath = [[fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.com.XXXXXX"] path]; 
  39.      
  40.     NSString *path = [containerPath stringByAppendingString:@"/Caches/"]; 
  41.     BOOL res = [fileMgr createDirectoryAtPath:path 
  42.                   withIntermediateDirectories:YES 
  43.                                    attributes:nil 
  44.                                         error:nil]; 
  45.     if (!res) { 
  46.         return
  47.     } 
  48.     NSString *filePath = [path stringByAppendingPathComponent:@"QDLabCache.json"]; 
  49.      
  50.     if ([NSJSONSerialization isValidJSONObject:rawDic]) 
  51.     { 
  52.         NSError *error; 
  53.         NSData *jsonData = [NSJSONSerialization dataWithJSONObject:rawDic 
  54.                                                            options:NSJSONWritingPrettyPrinted 
  55.                                                              error:&error]; 
  56.          
  57.         dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
  58.             [jsonData writeToFile:filePath atomically:YES]; 
  59.         }); 
  60.     } 
  61.  
  62. - (NSString *)getServerIP 
  63.     if ([self getDEBUG]) { 
  64.         NSFileManager *fileMgr = [NSFileManager defaultManager]; 
  65.         NSString *containerPath = [[fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.com.XXXXXX"] path]; 
  66.          
  67.         NSString *filePath = [containerPath stringByAppendingPathComponent:@"QDServerIP.json"]; 
  68.          
  69.         if ([fileMgr fileExistsAtPath:filePath]) { 
  70.             NSError *error; 
  71.             NSArray *serverIPArr = [[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filePath] options:NSJSONReadingMutableContainers error:&error] copy]; 
  72.             return serverIPArr.firstObject; 
  73.         } 
  74.     } 
  75.     return @"http://app3.qdaily.com"
  76.  
  77. - (BOOL)getDEBUG { 
  78. #ifdef DEBUG 
  79.     return YES; 
  80. #elif BETA 
  81.     return YES; 
  82. #else 
  83.     return NO
  84. #endif 
  85. @end  

***呢,這個是我其中一個widget的文件結構。 

 

 

 

widget雖小,但是我當時在開發的時候還是盡量想怎么復雜怎么做,畢竟這種東西,開發一次,幾乎以后再也不會去動了。畢竟……針尖上還要帶著腳鐐跳舞實在太累了😂。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2010-06-09 17:09:40

三網融合

2011-09-08 09:24:34

Mac Widget監測系統iStatpro

2009-11-23 09:20:42

Intel CTO數據中心

2014-01-09 13:56:51

2013-08-02 10:32:56

DevOps

2010-12-01 11:36:02

跳槽

2013-09-12 13:27:07

DevOps

2010-03-31 13:37:38

Ubuntu 10.0

2011-09-07 14:20:42

Android Wid組件

2013-01-06 14:28:45

Ubuntu手機Ubuntu手機系統

2011-09-07 16:24:10

Qt Widget

2009-06-15 11:33:44

無線路由器WGR612NETGEAR

2012-11-27 11:10:11

云計算經濟

2011-09-08 11:13:29

Widget

2019-12-03 10:58:58

HTTPS證書網站

2011-09-08 15:07:10

Android Wid搭建

2011-05-03 15:13:23

BlackBerryWidget

2010-07-13 09:02:19

Widget開發

2011-03-14 09:55:25

AndroidWidget

2011-09-09 17:59:26

QT Widget
點贊
收藏

51CTO技術棧公眾號

亚洲黄色在线播放| 日本一二三区在线观看| 色香欲www7777综合网| 久久精品网站免费观看| 国产欧美精品xxxx另类| 久久久久亚洲AV成人| 女同另类激情重口| 欧美在线观看视频在线| 粉嫩av一区二区三区天美传媒 | 日本激情视频一区二区三区| 婷婷视频一区二区三区| 日韩欧美国产高清91| 日本不卡在线播放| 国产成人精品无码高潮| 欧美一级久久| 欧美精品中文字幕一区| 国产精品成人一区二区三区电影毛片 | 欧美在线不卡区| 可以免费看av的网址| 全国精品免费看| 日韩欧美一级片| 毛葺葺老太做受视频| 免费在线播放电影| 国产欧美日韩在线| 国产精品国产三级国产专区53| 天天干天天操天天爱| 真实国产乱子伦精品一区二区三区| 亚洲精品mp4| 天天操夜夜操很很操| 日韩经典一区| 日韩欧美国产网站| 国产va亚洲va在线va| 日本电影在线观看网站| 成人亚洲一区二区一| 92国产精品久久久久首页| 国产在线观看第一页| 国产亚洲福利| 久久久久久久久久国产| 午夜精品福利在线视频| 日韩国产综合| 国产亚洲精品久久久久久牛牛| 亚洲精品乱码久久久久久久| 粉嫩的18在线观看极品精品| 日韩一区二区在线看| 在线免费看污网站| 久久麻豆视频| 欧美男女性生活在线直播观看| 不要播放器的av网站| 亚洲精品永久免费视频| 欧美日韩国产一区中文午夜| 影音先锋成人资源网站| 麻豆传媒视频在线观看免费| 中文字幕在线观看一区二区| 在线观看免费91| 天堂地址在线www| 国产精品麻豆99久久久久久| 亚洲一区3d动漫同人无遮挡 | 国产精品丝袜黑色高跟鞋| 免费高清成人在线| 国产精品美乳在线观看| 成人黄色三级视频| 九九精品视频在线看| 国产精品视频在线播放| 亚洲怡红院av| 国产精品一区二区不卡| 亚洲综合在线做性| 亚洲国产精品无码久久| 成人av在线资源| 精品视频在线观看| 久久伊伊香蕉| 国产精品看片你懂得 | 亚洲激情网站| 欧美与欧洲交xxxx免费观看| 波多野结衣不卡| 久久国产尿小便嘘嘘| 92国产精品久久久久首页| www.激情五月.com| 99免费精品在线观看| 欧美高清视频一区| 婷婷成人激情| 亚洲v日本v欧美v久久精品| 免费国产黄色网址| 亚州一区二区三区| 欧美精品18+| 亚洲av熟女高潮一区二区| 丝袜久久网站| 综合国产在线观看| 九九免费精品视频| 日韩午夜在线| 国产精品一区二区久久久| 999国产精品视频免费| 99免费精品在线| 中文字幕一区综合| heyzo在线欧美播放| 在线免费观看视频一区| 三级网站免费看| 欧美国产不卡| 久久精品国产96久久久香蕉| 亚洲国产精一区二区三区性色| 爽好多水快深点欧美视频| 成人性生交xxxxx网站| 午夜视频www| 亚洲特黄一级片| 妺妺窝人体色www在线小说| 日本一区免费网站| 亚洲第一精品自拍| 一本一本久久a久久| 亚洲日韩视频| 亚洲一区二区三区sesese| 午夜性色福利视频| 亚洲视频免费观看| 韩国一区二区av| 亚洲经典视频| 日韩有码在线电影| 亚洲 欧美 日韩 综合| 精品综合免费视频观看| 欧美xxxx黑人又粗又长精品| 亚洲www色| 欧美日韩激情一区二区| 97超碰在线免费观看| 欧美日韩爆操| 成人精品网站在线观看| 免费观看成年在线视频网站| 一区二区欧美视频| 久热精品在线观看视频| 亚洲免费毛片| 亚洲18私人小影院| 国产婷婷在线视频| 国产精品国产成人国产三级| 黄色片久久久久| 欧美亚洲色图校园春色| 欧美国产日韩一区| 99在线观看免费| 国产精品国产精品国产专区不片| 欧美伦理片在线看| 一区三区在线欧| 国外成人在线直播| 亚洲精品无amm毛片| 亚洲乱码中文字幕| 在线一区二区不卡| 999国产精品永久免费视频app| 国产精品久久久久久久一区探花| 日本啊v在线| 欧美日韩激情美女| 亚洲一区二区三区综合| 亚洲视频免费| 国产精品我不卡| 色呦呦在线播放| 日韩精品资源二区在线| 欧美成人片在线观看| 国产麻豆精品久久一二三| 欧美 日韩 国产 在线观看| 国产亚洲精彩久久| 久久影视免费观看| hs视频在线观看| 一区二区在线观看av| 99国产精品免费视频| 欧美大片专区| ts人妖另类在线| av日韩国产| 日韩精品在线视频美女| 男人天堂2024| 国产精品久久午夜| 在线观看av免费观看| 欧美日一区二区在线观看| 国产传媒一区二区| free性m.freesex欧美| 日韩精品视频在线播放| 波多野结衣在线观看一区| 中文字幕av资源一区| 国产精品嫩草影院8vv8| 国产精品激情| 麻豆91蜜桃| 亚洲第一会所| 欧美成在线观看| 日本免费不卡视频| 图片区小说区国产精品视频| 日韩在线免费观看av| 久久99蜜桃精品| 成人黄色大片网站| 国产一区二区三区不卡视频网站 | 涩涩屋成人免费视频软件| 欧美激情国产精品| 国产主播福利在线| 欧美色视频一区| 久久97人妻无码一区二区三区| 91一区二区在线| 少妇一级淫免费放| 一级毛片免费高清中文字幕久久网| 国产日韩精品一区观看| 国产精品蜜月aⅴ在线| 欧美激情国产高清| 国产毛片在线| 精品国产乱码久久久久久久| 免费污污视频在线观看| 亚洲欧洲一区二区三区| 国产成人精品无码片区在线| 久草精品在线观看| 俄罗斯av网站| 亚洲情侣在线| 欧日韩一区二区三区| 日韩激情精品| 国产精品69久久久久| 日韩激情美女| 综合网中文字幕| 天天综合网在线| 欧美一区二区免费观在线| 在线观看免费av片| 一区二区三区鲁丝不卡| 日韩福利在线视频| 99久久99久久精品免费观看| 在线播放黄色av| 日本女优在线视频一区二区| 久久久天堂国产精品| 成人6969www免费视频| 国产一区二区三区av在线| 亚洲我射av| 国产精品久久久精品| 黄色在线观看www| 欧美猛交ⅹxxx乱大交视频| fc2在线中文字幕| 日韩精品在线观看一区| 性生活视频软件| 91精品国产91久久综合桃花 | 在线无限看免费粉色视频| 精品中文一区| 久久精品国产一区二区三区日韩| 欧洲大片精品免费永久看nba| 国产美女久久精品香蕉69| 日韩免费福利视频| 777精品视频| 丁香花高清在线观看完整版| 九九热最新视频//这里只有精品| 麻豆网在线观看| 久久精彩免费视频| 欧美成人性生活视频| 这里只有视频精品| 川上优的av在线一区二区| 亚洲美女在线看| 深夜福利在线观看直播| 亚洲精品美女久久久| 日本精品一二区| 亚洲精品短视频| 午夜福利视频一区二区| 国产视频久久久久久久| 日韩一二三四| 亚洲人成网站777色婷婷| 亚州精品国产精品乱码不99按摩| 亚洲第一色中文字幕| 欧日韩在线视频| 亚洲护士老师的毛茸茸最新章节 | 欧美极品少妇全裸体| 久久久久久国产精品免费无遮挡 | 日韩成人中文电影| 凸凹人妻人人澡人人添| 亚洲国产精品国自产拍av秋霞| 免费观看国产精品| 亚洲精品动漫100p| 日韩av成人| 亚洲欧洲日产国码av系列天堂| 九色在线视频| 色哟哟入口国产精品| 成人国产免费电影| 欧美猛交ⅹxxx乱大交视频| 日本大片在线播放| 97国产suv精品一区二区62| 日韩脚交footjobhd| 97成人超碰免| 黄色精品视频| 91成人理论电影| 欧美交a欧美精品喷水| 欧美一区视久久| www.四虎精品| 日韩1区2区3区| 欧美国产日韩另类 | 成人在线视频福利| 亚洲国产aⅴ精品一区二区| 国产精品我不卡| 超碰成人久久| 国产av熟女一区二区三区| 免费在线日韩av| 免费网站在线观看黄| 成人免费不卡视频| 亚洲理论片在线观看| 亚洲日穴在线视频| 日韩欧美亚洲视频| 欧美三级中文字| 成人免费视频国产| 国产亚洲精品久久久久久牛牛| a黄色片在线观看| 欧美在线一区二区视频| 午夜不卡一区| 久久综合九色综合网站| 99久久夜色精品国产亚洲1000部| 免费无码毛片一区二三区| 免费观看久久久4p| 在线免费看黄色片| 国产精品福利av| 91视频免费网址| 欧美三级韩国三级日本一级| 人人妻人人澡人人爽久久av| 综合欧美国产视频二区| 无码小电影在线观看网站免费| 91精品一区二区| 久久99国内| 日韩 欧美 视频| 精品一区二区免费在线观看| 美女100%无挡| 亚洲五月六月丁香激情| 91超薄丝袜肉丝一区二区| 日韩精品极品毛片系列视频| 亚洲羞羞网站| 国产欧美亚洲精品| 久久99国产精品视频| 欧美人成在线观看| 国产一区在线视频| 美国黑人一级大黄| 欧美性生交大片免费| 成人精品在线播放| 欧美成人精品在线| 欧洲亚洲精品久久久久| 日本精品视频一区| 在线综合亚洲| 日韩无码精品一区二区| 亚洲精品国产a久久久久久 | 久久av中文字幕片| 日本一卡二卡在线播放| 欧美性xxxx极品高清hd直播| 欧美一区二区公司| 久久久亚洲福利精品午夜| 国产精品一区二区三区www| 亚洲一区二区三区午夜| 老妇喷水一区二区三区| 国产制服丝袜在线| 午夜精品久久一牛影视| 好吊色一区二区| 欧美精品激情在线观看| av综合网址| 国产日韩欧美精品在线观看| 粉嫩aⅴ一区二区三区四区| 欧美激情一区二区视频| 欧美一区二区三区系列电影| 精产国品自在线www| 成人国产精品免费视频| 久久中文字幕av| 天天看片天天操| 亚洲男人的天堂在线观看| 国产99对白在线播放| 欧美成人在线免费| 视频一区中文字幕精品| 亚洲国产成人精品无码区99| 99久久久国产精品| 亚洲天堂视频网站| 亚洲人成电影网站色| 91亚洲视频| 亚洲一区二区三区涩| 国产乱码精品一区二区三区av| 成人免费看片98| 亚洲精品av在线播放| 久久爱91午夜羞羞| 色综合电影网| 国产一区在线视频| 精品午夜福利视频| 亚洲激情中文字幕| 性高爱久久久久久久久| 一区二区三区四区免费视频| 国产一区二区美女诱惑| 国产在线综合网| 亚洲美女在线观看| 四虎在线精品| aa在线观看视频| 国产欧美日韩激情| 99久久久久成人国产免费| 国内精品久久久久久| 国产麻豆精品久久| 一级黄色高清视频| 亚洲第一成人在线| av二区在线| 成人一区二区在线| 久久久国产亚洲精品| 国产高潮国产高潮久久久91 | 97超碰资源| 免费国产自线拍一欧美视频| 后入内射无码人妻一区| 精品精品国产高清一毛片一天堂| 伊人久久在线| xxxxxx在线观看| 久久免费看少妇高潮| 国产老妇伦国产熟女老妇视频| 午夜精品福利在线观看| 波多野结衣在线播放一区| 在线观看视频在线观看| 黄色成人av网| 麻豆视频在线观看免费网站| 免费av在线一区二区| 国产毛片精品视频| 天干夜夜爽爽日日日日| 欧美激情精品久久久久久大尺度| 欧美手机视频| 亚洲中文字幕一区|