亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > iOS > 正文

iOS開發(fā)教程之微博骨架搭建

2019-10-21 18:57:55
字體:
供稿:網(wǎng)友
本文是IOS開發(fā)教程的第四篇,主要講訴如何一步步搭建起微博的骨架,并附上源碼,希望對大家的IOS開發(fā)能提供些借鑒
 

最終效果圖:

iOS開發(fā)教程之微博骨架搭建

BeyondViewController.m

//// BeyondViewController.m// 20_帥哥no微博//// Created by beyond on 14-8-3.// Copyright (c) 2014年 com.beyond. All rights reserved.// 這個就是主控制器,分為兩塊,下面是Dock欄,上面是顯示不同的子控制器的view,子控制器最好用導航控制器包裝一下,這樣子控制器就自帶了導航條,左按鈕,標題,右按鈕/* 無法點擊,或點擊 無響應的原因: userInteractionEnabled = NO; hidden = YES alpha <= 0.01 clearColor ,view的顏色為透明,不可以被點擊 */#import "BeyondViewController.h"#import "Dock.h"#import "DockBtn.h"#import "Column.h"// 主控制器下面Dock的高度#define kDockHeight 44@interface BeyondViewController (){  // 從plist中加載 的欄目對象數(shù)組  NSMutableArray *_columns;    // 主控制器下方的Dock選項欄  Dock *_dock;    // 記錄當前選中的子控制器,目的是將其view從父控制器的view中移除,為添加新的子控制器的view做準備  UIViewController *_currentChildVC;}@end@implementation BeyondViewController- (BOOL)prefersStatusBarHidden{  return NO;  }- (void)viewDidLoad{  [super viewDidLoad];  // 0.從plist加載 欄目數(shù)組,遍歷數(shù)組,根據(jù)字典,生成一個一個欄目對象,存入欄目對象數(shù)組中  _columns = [NSMutableArray array];  NSBundle *mainBundle = [NSBundle mainBundle];  NSString *fullPath = [mainBundle pathForResource:@"ColumnList.plist" ofType:nil];  NSArray *arr = [NSArray arrayWithContentsOfFile:fullPath];    for (NSDictionary *dict in arr) {    Column *column = [Column columnWithDict:dict];    [_columns addObject:column];  }  // 1.添加dock到主控制器方的下方  [self addDock];    // 2.一次性創(chuàng)建所有的子控制器,并用導航包裝后,添加到當前控制器的childViewControllers  [self createAllChildViewControllers];    // 3.默認選中第0個控制器  [self changeChildViewAtIndex:0 andChildVCClassName:@"HomeViewController"];    // 4.一次性設置全局的導航欄上面的顏色主題樣式  [self setGlobalNavigationItemColorTheme];  }#pragma mark 添加dock- (void)addDock{  // 1.添加dock到主控制器方的下方  _dock = [[Dock alloc] init];    // 2.監(jiān)聽Dock內(nèi)部Btn的點擊,讓控制器成為dock的代理屬性,或者,為dock的成員blok賦值  __unsafe_unretained BeyondViewController *beyond = self;  _dock.btnClickBlock = ^(DockBtn *btn)  {    // 調(diào)用自定義方法,更改子視圖,參數(shù)1:索引號,參數(shù)2:子控制器的類名    [beyond changeChildViewAtIndex:btn.tag andChildVCClassName:btn.viewControllerClassName];  };      // 3,設置Dock的frame  _dock.frame = CGRectMake(0, self.view.frame.size.height - kDockHeight, self.view.frame.size.width, kDockHeight);  log(@"_dock frame--%@",NSStringFromCGRect(_dock.frame));  // 4,添加dock到主控制器方的view  [self.view addSubview:_dock];    // 2.遍歷column對象數(shù)組,批量添加dock里面的DockBtn  for (Column *column in _columns) {    [_dock addDockBtnWithIconName:column.columnImgName title:column.columnName viewControllerClassName:column.columnClassName];  }    // 3.設置dock默認選中第0個  [_dock setDockBtnClickedAtIndex:0];  }// 自定義方法,更改子視圖,參數(shù)1:索引號,參數(shù)2:子控制器的類名- (void)changeChildViewAtIndex:(int)index andChildVCClassName:(NSString *)viewControllerClassName{  log(@"點擊了 %@",viewControllerClassName);  if (self.childViewControllers.count > 0) {    // 0,先取出新的子控制器,如果 新的子控制器就是當前的這個控制器,直接返回 好嗎?    UIViewController *childVC = [self childViewControllers][index];    if (childVC == _currentChildVC) return ;    // 1,先移除先前的子控制器的view    [_currentChildVC.view removeFromSuperview];        // 2,添加新的子控制器的view到主控制器的view        childVC.view.frame = CGRectMake(0, 20, 320, 416);    //log(@"self view --%@",NSStringFromCGRect(self.view.frame));    //log(@"childVC view --%@",NSStringFromCGRect(childVC.view.frame));    // 不會重復添加view,因為一旦發(fā)現(xiàn)重復添加某個view,就會將它置于最上面,最好是,先移除舊的view,再添加新的view    [self.view addSubview:childVC.view  ];        // 3,重要,必須更新當前的子控制器,為下次移除做準備    _currentChildVC = childVC;  }}#pragma mark 創(chuàng)建所有的子控制器(一共5個,首面,消息,我,廣場,更多)- (void)createAllChildViewControllers{  // 1.遍歷欄目對象數(shù)組,批量創(chuàng)建所有的子控制器,并用導航控制器包裝,最后添加到self childViewControllers數(shù)組中保存  for (Column *column in _columns) {    Class c = NSClassFromString(column.columnClassName);    UIViewController *childVC =nil;    if ([NSStringFromClass(c) isEqualToString:@"MoreViewController"]) {      // 特別注意:在繼承了tableView之后,要想再使用group樣式,必須在創(chuàng)建的時候指定樣式為group,這兒特別指的是moreViewController      childVC = [[c alloc]initWithStyle:UITableViewStyleGrouped];    } else {      childVC = [[c alloc]init];    }    // 設置導航欄的標題    childVC.navigationItem.title = column.columnName;    // 重寫父類的方法    [self addChildViewController:childVC];  }}#pragma marck - 重寫父類的方法// 為了在添加子控制器時,全部包裝成一個個導航控制器,所以重寫addChildViewController方法- (void)addChildViewController:(UIViewController *)childVC{  UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:childVC];  // 將包裝成導航控制器的子控制器添加到主控制器中,這樣每一個子控制器就擁有自己的特有的導航條了  [super addChildViewController:nav];}// 4.一次性設置全局的導航欄上面的顏色主題樣式- (void)setGlobalNavigationItemColorTheme{  // 1.導航欄  // 1.1.操作navBar相當操作整個應用中的所有導航欄  UINavigationBar *navBar = [UINavigationBar appearance];    // 1.2.設置導航欄UINavigationBar的背景圖片(拉伸)  [navBar setBackgroundImage:[UIImage imageStretchedWithName:@"navigationbar_background.png"] forBarMetrics:UIBarMetricsDefault];  // 1.3.設置狀態(tài)欄背景,沒有效果???  [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;      // 1.4.設置導航欄UINavigationBar的Title文字屬性,通過字典 設置  NSMutableDictionary *navigationBarTitleDict = [NSMutableDictionary dictionary];  // 前景色,即文字的顏色  [navigationBarTitleDict setObject:[UIColor darkGrayColor] forKey:NSForegroundColorAttributeName];  // 文字陰影取消,字典中不能放結(jié)構(gòu)體,要用NSValue包裝一下  [navigationBarTitleDict setObject:[NSValue valueWithUIOffset:UIOffsetZero] forKey:NSShadowAttributeName];      // 2.導航欄上面的item  UIBarButtonItem *barBtnItem =[UIBarButtonItem appearance];  // 2.1.設置背景  // 按鈕正常狀態(tài)時侯的背景  [barBtnItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];  // 按鈕高亮狀態(tài)時侯的背景  [barBtnItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background_pushed.png"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];  // 按鈕未選中狀態(tài)時侯的背景  [barBtnItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background_disable.png"] forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];      // 2.2.設置barBtnItem的文字屬性  NSMutableDictionary *barItemTitleDict = [NSMutableDictionary dictionary];  // barItemDict的文字顏色  [barItemTitleDict setValue:[UIColor darkGrayColor] forKey:NSForegroundColorAttributeName];  // barItemDict的字體  [barItemTitleDict setValue:[UIFont systemFontOfSize:13] forKey:NSFontAttributeName];    // 2.3.用字典 設置barBtnItem的標題文字屬性  [barBtnItem setTitleTextAttributes:barItemTitleDict forState:UIControlStateNormal];  [barBtnItem setTitleTextAttributes:barItemTitleDict forState:UIControlStateHighlighted];}@end

Dock.h

//// Dock.h// 20_帥哥no微博//// Created by beyond on 14-8-3.// Copyright (c) 2014年 com.beyond. All rights reserved.// Dock就是主控制器下面的一條bar,它里面是由一個個按鈕DockBtn組成#import <UIKit/UIKit.h>@class DockBtn;@interface Dock : UIView// 添加一個item到Dock(View),參數(shù)是圖標名,和要顯示 的標題 ,以及對應的子控制器的類名- (void)addDockBtnWithIconName:(NSString *)iconName title:(NSString *)title viewControllerClassName:(NSString *)viewControllerClassName;// 當Dock里面的某一個按鈕被點擊了的時候,調(diào)用代碼塊,處理相應的點擊事件@property (copy,nonatomic) void(^btnClickBlock)(DockBtn *);// 自定義方法,通過代碼決定哪一個dockBtn被點擊了,參數(shù)是 Dock欄里面的那個將要被點擊的按鈕的索引- (void)setDockBtnClickedAtIndex:(int)index;@end

Dock.m

//// Dock.m// 20_帥哥no微博//// Created by beyond on 14-8-3.// Copyright (c) 2014年 com.beyond. All rights reserved.// 這個就是主控制器下面那一欄,Tabbar,也叫Dock,里面有五個按鈕,分別是首頁,我,消息,廣場,更多#import "Dock.h"#import "DockBtn.h"@interface Dock(){  // 當前選中了那個dockBtn  DockBtn *_currentDockBtn;}@end@implementation Dock// init方法內(nèi)部會調(diào)用initWithFramne- (id)initWithFrame:(CGRect)frame{  self = [super initWithFrame:frame];  if (self) {    // 固有固定屬性,設置Dock背景顏色(分類方法,使用imageName就可進行平鋪)    self.backgroundColor = [UIColor colorWithPatternImageNamed:@"tabbar_background.png"];  }  return self;}// 給外部提供一個接口,添加一個DockBtn(按鈕)到Dock(View),參數(shù)是圖標名,和要顯示 的標題,以及對應的子控制器的類名- (void)addDockBtnWithIconName:(NSString *)iconName title:(NSString *)title viewControllerClassName:(NSString *)viewControllerClassName{  // 1.創(chuàng)建dock里面的按鈕,并添加到dock里面  DockBtn *dockBtn = [DockBtn buttonWithType:UIButtonTypeCustom];  [self addSubview:dockBtn];    // 2.設置dockBtn正常狀態(tài)下顯示 的文字  [dockBtn setTitle:title forState:UIControlStateNormal];    // 3.分類方法,設置按鈕正常和選中狀態(tài)下的圖片,返回圖片尺寸  [dockBtn setBtnImgForNormalAndSelectedWithName:iconName];    // 4.設置dockBtn對應點擊后,要實例化的子控制器的類名  [dockBtn setViewControllerClassName:viewControllerClassName];    // 5.監(jiān)聽點擊,只要按下就響應,(事件先傳遞給Dock的方法,Dock的方法中再通過調(diào)用屬性block代碼塊,從而調(diào)用到主控制器里面的代碼,原因是:在主控制器里面實例化的dock,在Dock里面才實例化的dockBtn,因此,主控制器并不知道dockItem的存在)  [dockBtn addTarget:self action:@selector(dockBtnClick:) forControlEvents:UIControlEventTouchDown];    // 6.遍歷設置Dock里面所有按鈕的frame (使之平均分布)  [self setDockBtnFrames];}// 遍歷設置Dock里面所有按鈕的frame (使之平均分布)- (void)setDockBtnFrames{  // 1,獲取dock里面所有的按鈕個數(shù)  int dockBtnNum = self.subviews.count;    // 2,根據(jù)dock中,當前當前有多少個DockBtn,計算出每個dockBtn的寬度(self是dock,320*44)  CGFloat dockBtnWidth = self.frame.size.width / dockBtnNum;  CGFloat dockBtnHeight = self.frame.size.height;    for (int i = 0; i < dockBtnNum; i++) {    // 1.逐個取出子控件    DockBtn *btn = self.subviews[i];        // 2.根據(jù)索引 計算它的x    btn.frame = CGRectMake(i * dockBtnWidth, 0, dockBtnWidth, dockBtnHeight);        // 3.初始化的時候,將第0個btn(即首頁)選中    if (i == 0) {      btn.selected = YES;      // 最重要的是,將選中的,置為當前的按鈕,用成員變量記住,當點擊dock上button的時候,先將current置為未選中,然后就被點擊的按鈕選中,最后最重要的是,將被點擊的按鈕重新置為當前 的按鈕,用成員變量記住      _currentDockBtn = btn;    }        // 4.因為點擊dock里面的按鈕的時候,要知道點擊了哪一個按鈕,所以給每個按鈕綁定一個tag,作為它的索引    btn.tag = i;  }}// 最重要的是,當點擊dock上button的時候,先將current置為未選中,然后就被點擊的按鈕選中,最后最重要的是,將被點擊的按鈕重新置為當前 的按鈕,用成員變量記住- (void)dockBtnClick:(DockBtn *)btn{  // 1.讓當前的btn取消選中  _currentDockBtn.selected = NO;    // 2.讓新的btn選中  btn.selected = YES;    // 3.最后,讓新的btn變?yōu)楫斍斑x中btn  _currentDockBtn = btn;    // 4.調(diào)用block,即主控制中傳遞過來的代碼塊,目的是處理點擊之后的實例化對應的子控制器  if (_btnClickBlock) {    // 將參數(shù) DockBtn傳遞過去,給主控制器,它里面成員變量記住了它對應的控制器的類名    _btnClickBlock(btn);  }}// 自定義方法,通過代碼決定哪一個dockBtn被點擊了,參數(shù)是 Dock欄里面的那個將要被點擊的按鈕的索引- (void)setDockBtnClickedAtIndex:(int)index{  // 1.robust判斷  if (index < 0 || index >= self.subviews.count) return;    // 2.通過索引 拿到對應的DockBtn viewWithTag也行  DockBtn *btn = self.subviews[index];    // 3.手動調(diào)用下面方法,相當于用戶用手點擊了dock里面對應的按鈕  [self dockBtnClick:btn];}@end

DockBtn.h

//// DockBtn.h// 20_帥哥no微博//// Created by beyond on 14-8-4.// Copyright (c) 2014年 com.beyond. All rights reserved.// 一個DockBtn代表Dock上面的一個按鈕,它有個成員是對應子控制器的類名,比如Home按鈕,成員屬性的值就是叫:HomeViewController#import <UIKit/UIKit.h>@interface DockBtn : UIButton// 每個dockBtn中,用一個成員記住 它對應的控制器的類名@property (nonatomic,copy) NSString *viewControllerClassName;@end

DockBtn.m

//// DockBtn.m// 20_帥哥no微博//// Created by beyond on 14-8-4.// Copyright (c) 2014年 com.beyond. All rights reserved.// 一個DockBtn代表Dock上面的一個按鈕,它有個成員是對應子控制器的類名,比如Home按鈕,成員屬性的值就是叫:HomeViewController#import "DockBtn.h"// 按鈕的內(nèi)容的總寬度#define kBtnContentWidth contentRect.size.width// 按鈕的內(nèi)容的總高度#define kBtnContentHeight contentRect.size.height// 按鈕里的圖片的所占的高度比例#define kImageHeightRatio 0.6// 按鈕里的文本標簽的所占的高度比例#define kLabelHeightRatio (1- kImageHeightRatio)@implementation DockBtn// 一些默認的通用的屬性一定要寫在構(gòu)造方法里面- (id)initWithFrame:(CGRect)frame{  self = [super initWithFrame:frame];  if (self) {    // 1.設置按鈕文字屬性 (局中,字體大小)    self.titleLabel.textAlignment = NSTextAlignmentCenter;    self.titleLabel.font = [UIFont systemFontOfSize:12];        // 2.設置按鈕圖片屬性 (放大模式,取消按鈕默認的點擊高亮時的變色)    self.imageView.contentMode = UIViewContentModeScaleAspectFit;    // 取消按鈕默認的點擊高亮時的變色(image is drawn darker when highlighted or pressed)    self.adjustsImageWhenHighlighted = NO;        // 3.分類方法,設置按鈕選中時的背景    [self setBgImgForSelected:@"tabbar_slider.png"];  }  return self;}#pragma mark 重寫父類的方法(覆蓋父類在高亮時所作的行為)- (void)setHighlighted:(BOOL)highlighted{  // 因為 這里只需用按鈕的選中和默認狀態(tài)時的圖片,所以要取消高亮狀態(tài)的一些默認變色行為  // 這里什么也不寫,即取消,按鈕本身 在高亮的時候執(zhí)行的那些行為  }#pragma mark 返回是按鈕內(nèi)部UIImageView的邊框(按鈕中的圖片在上方,居中)- (CGRect)imageRectForContentRect:(CGRect)contentRect{  // 要居中,最快辦法就是讓按鈕中的圖片寬度和按鈕一樣寬  return CGRectMake(0, 0, kBtnContentWidth, kBtnContentHeight * kImageHeightRatio);}#pragma mark 返回是按鈕內(nèi)部UILabel的邊框(按鈕中的文字在下方,居中)- (CGRect)titleRectForContentRect:(CGRect)contentRect{  // 要居中,最快辦法就是讓按鈕中的Label寬度和按鈕一樣寬    // 文字的y位于圖片的下邊線的上方5個單位距離,即距離圖片上方5  CGFloat labelY = kBtnContentHeight * kImageHeightRatio - 5;  // 文字的高度是占按鈕余下的所有高度  CGFloat labelHeight = kBtnContentHeight - labelY;  return CGRectMake(0, labelY, kBtnContentWidth, labelHeight);}@end

模型Column.h

//// Column.h// 20_帥哥no微博//// Created by beyond on 14-8-4.// Copyright (c) 2014年 com.beyond. All rights reserved.// 1個Column模型對應Dock上面的一個按鈕,類別#import <Foundation/Foundation.h>// 數(shù)據(jù)模型 代表一個欄目@interface Column : NSObject// 欄目名稱@property (nonatomic,copy)NSString *columnName;// 欄目圖片名稱@property (nonatomic,copy)NSString *columnImgName;// 欄目對應的控制器的類名@property (nonatomic,copy)NSString *columnClassName;// UI控件用weak,字符串用copy,其他對象用strong// 提供一個類方法,即構(gòu)造函數(shù),返回封裝好數(shù)據(jù)的對象(返回id亦可)+ (Column *)columnNamed:(NSString *)columnName imgName:(NSString*)columnImgName className:(NSString *)columnClassName;// 類方法,字典 轉(zhuǎn) 對象 類似javaBean一次性填充+ (Column *)columnWithDict:(NSDictionary *)dict;// 對象方法,設置對象的屬性后,返回對象- (Column *)initWithDict:(NSDictionary *)dict;@end

模型Column.m

//// Column.m// 20_帥哥no微博//// Created by beyond on 14-8-4.// Copyright (c) 2014年 com.beyond. All rights reserved.//#import "Column.h"@implementation Column// 返回一個包含了 欄目對應控制器名字的 對象實例+ (Column *)columnNamed:(NSString *)columnName imgName:(NSString *)columnImgName className:(NSString *)columnClassName{  // 為了兼容子類 使用self  Column *column = [[self alloc]init];  column.columnName = columnName;  column.columnImgName = columnImgName;  column.columnClassName = columnClassName;  return column;}// 類方法,字典 轉(zhuǎn) 對象 類似javaBean一次性填充+ (Column *)columnWithDict:(NSDictionary *)dict{  // 只是調(diào)用對象的initWithDict方法,之所以用self是為了對子類進行兼容  return [[self alloc]initWithDict:dict];}// 對象方法,設置對象的屬性后,返回對象- (Column *)initWithDict:(NSDictionary *)dict{  // 必須先調(diào)用父類NSObject的init方法  if (self = [super init]) {    // 設置對象自己的屬性    [self setValuesForKeysWithDictionary:dict];  }  // 返回填充好的對象  return self;}@end

Dock里面的五個欄目按鈕的數(shù)據(jù)來源ColumnList.plist

iOS開發(fā)教程之微博骨架搭建



注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美性猛交xxxx免费看| 丁香色欲久久久久久综合网| 粉嫩一区二区三区国产精品| 亚洲一区中文字幕在线| 亚洲国产精品免费视频| 国产精品精品| 久久精品视频久久| 波多野结衣在线网址| 亚洲国产欧美在线人成| 日韩欧美激情一区| 国产麻豆欧美日韩一区| 日韩欧美中文字幕公布| 国产有码在线一区二区视频| 日韩av手机版| 日韩精品中文字幕在线不卡尤物| 国产av不卡一区二区| 日本成人免费视频| 在线黄色的网站| 青青视频在线观| 人人精品久久| 91精品人妻一区二区三区四区| 黄动漫在线观看| caoporen国产精品视频| 亚洲狠狠丁香婷婷综合久久久| 成年网站在线视频网站| 午夜天堂在线观看| 中文字幕欧美激情一区| 九色网友自拍视频手机在线| 久久久欧美精品sm网站| 日韩精品一区二区三区视频| 日韩一级网站| 国产精品一区二区久激情瑜伽| 日韩精品极品视频| 午夜精品一区二区在线观看的| 98国产高清一区| 精品久久久视频| 精品9999| 欧日韩不卡在线视频| 亚洲成人网上| 久久久综合av| 国产视频一区二区在线观看| 1区2区3区在线视频| 亚洲第一黄色网| 亚洲免费视频一区二区| 日本a人精品| 欧美日韩一二三四| 男人午夜免费视频| 日韩欧美一二三四区| 第四色日韩影片| 国产一区二区四区| 四虎成人精品一区二区免费网站| av在线日韩国产精品| 亚洲人成午夜免电影费观看| 国产日韩精品综合网站| av先锋影院| 精品免费囯产一区二区三区| 玖玖精品视频| 超碰97在线看| 青草av在线| 国产免费专区| 欧美毛片免费观看| 蜜臀久久精品久久久久| 成人国产亚洲精品a区天堂华泰| 精品久久久久久久久久久久久久| 中文字幕在线视频免费| 五月婷婷在线播放| 国产一区二区三区精品在线| 亚洲精品99| 欧美男人天堂网| 国产高清视频在线观看| 欧美区一区二| 精品人人视频| 日韩av片子| 成人一二三区视频| 九九久久九九久久| 色琪琪丁香婷婷综合久久| 国产精品久久久av| 免费激情视频在线观看| 亚洲成精国产精品女| 一本一道久久综合狠狠老精东影业| 精品人伦一区二区三区蜜桃免费| 美女在线观看视频一区二区| 99高清免费国产自产拍| 国产精品69久久久久水密桃| 黄色免费大片| 久久婷婷人人澡人人喊人人爽| 久久99精品国产自在现线小黄鸭| 欧洲一区精品| 亚洲欧美激情一区| 午夜丝袜av电影| 香蕉久久免费影视| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩视频在线播放| 国产一区二区三区三区在线观看| 免费日韩视频| 久久激情av| 成人黄页网站视频| 丰满少妇高潮久久三区| 福利在线一区二区三区| 亚洲精品中文在线观看| 超碰aⅴ人人做人人爽欧美| 丝袜足控免费网站xx网站| 精品视频一区二区不卡| 一女被多男玩喷潮视频| 国产精品一区二区三| 国产一区二区三区久久| 欧美一二三区视频| 国产成人无码av在线播放dvd| 免费看电影在线| www.久久久精品| 亚洲第一成年网| 国产拍揄自揄精品视频麻豆| 欧美国产先锋| 亚洲电影在线播放| 亚洲成av人**亚洲成av**| 成人动漫一区二区在线| 亚洲1区2区3区4区| 91在线无精精品白丝| 日韩成人免费电影| 欧美成年人视频| 香港三级经典全部种子下载| 欧美日韩精品在线一区二区| 91蜜桃传媒精品久久久一区二区| 日本一区二区不卡| 国产呻吟对白刺激无套视频在线| 99久久精品网站| 蜜臀视频一区二区三区| 操日韩av在线电影| 中文字幕精品国产| 精品亚洲一区二区三区四区| 国产精彩免费视频| 丰满少妇被猛烈进入| 2019年中文字幕| 8x8x8国产精品| 欧美精品久久久久久久久老牛影院| 久久综合桃花网| 韩国v欧美v日本v亚洲| 亚洲国产高清一区| 伊人久久大香线蕉综合四虎小说| 国产三级三级三级精品8ⅰ区| 亚洲1区在线| 亚洲影院色在线观看免费| 97一区二区国产好的精华液| 亚洲一区二区美女| 婷婷六月天在线| 少妇伦子伦精品无吗| 亚洲欧洲国产专区| 9765激情中文在线| 午夜男人视频在线观看| 国产老头和老头xxxx×| 校园春色综合网| 3d蒂法精品啪啪一区二区免费| 成人高清视频在线观看| jjzz在线观看| 免费毛片在线| 国产精品电影一区二区| 国产区一区二区三区| 在线看免费毛片| 日本高清视频一区二区三区| 韩国成人一区| 深田咏美在线x99av| 亚洲小说欧美激情另类| 一色道久久88加勒比一| 欧美大片网站在线观看| 黄动漫在线看| 国内精品久久久久影院一蜜桃| 韩国成人在线| 精品久久久久久综合日本| www.99精品| 欧美在线色视频| 美女搡bbb又爽又猛又黄www| 久草资源在线观看| 精品无码一区二区三区在线| 欧美浪妇xxxx高跟鞋交| 小说区视频区图片区| 丝袜人妻一区二区三区| 国产精品白嫩美女在线观看| 在线观看a网站| 69堂成人精品免费视频| aiai在线| 亚洲一区二区三区四区在线| 亚洲最新av网站| 成人在线爆射| 欧美久久久久免费| 国产在线观看www| 成人国产亚洲欧美成人综合网| 欧美亚洲高清一区| 另类成人小视频在线| 国产一区二区免费在线观看| 国产精品视频在线观看免费| 日本在线视频播放| 天天干狠狠干| 51漫画成人app入口| 在线观看亚洲视频啊啊啊啊| 亚洲一区二区影视| 日产精品一线二线三线芒果| 96精品久久久久中文字幕| 日韩电影大片中文字幕| |精品福利一区二区三区| 欧美一区日韩一区| 妺妺窝人体色www在线下载| 国外成人免费视频| 亚洲日本成人女熟在线观看| 国产一级生活片| 亚洲天堂网视频| 亚洲日韩视频| 亚洲一卡二卡在线观看| 亚洲国产欧美国产综合一区| 国产91色在线|| 亚洲午夜激情网页| 成人毛片免费看| 亚洲国产一区二区精品专区| www.日韩| 水蜜桃免费高清视频在线播放| 天天爱天天做天天操| 1024av视频| 韩日一区二区三区| 在线观看国产精品淫| 99久久久精品免费观看国产蜜| 91在线公开视频| 69精品无码成人久久久久久| 国产a免费视频| 亚洲成熟女性毛茸茸| 国产精品一区二区小说| 高清精品xnxxcom| 亚洲性视频网址| 久久久久亚洲AV成人无码国产| 日日夜夜精品视频天天综合网| 欧美日韩性在线观看| 免费在线黄色网| 亚洲欧美一区二区久久| 在线观看一区二区精品视频| 精品成人免费观看| 国产免费一区二区三区在线能观看| 一区二区三区波多野结衣在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 中文字幕精品—区二区日日骚| 猫咪在线永久网站| 日韩精品久久久| 亚洲国产美女视频| 欧美性大战久久久久久久| 国产一区二区三区免费视频| 深夜福利在线看| 性网站在线观看| 毛片av免费在线观看| 在线色欧美三级视频| 免费91麻豆精品国产自产在线观看| 亚洲va天堂va国产va久| 免费国偷自产拍精品视频| 波多野结衣在线电影| 91久久久久久久久久久久久| 黄色春季福利在线看| 中文字幕一区二区三区精华液| 亚洲一区日韩精品| 免费高清完整在线观看| 欧美日韩国产色站一区二区三区| 色噜噜狠狠色综合网图区| 久久青青色综合| 免费在线观看黄色小视频| 精品一区不卡| 国产三区二区一区久久| 亚洲综合免费观看高清完整版| 国产精品九九视频| 丝袜+亚洲+另类+欧美+变态| 国产a视频精品免费观看| 欧美专区在线观看一区| 亚洲美女喷白浆| 特级西西人体wwwww| www.日韩欧美| 美女做暖暖视频免费在线观看全部网址91| 日韩精品2区| 亚洲中午字幕| 麻豆国产欧美一区二区三区| 亚洲精品国产精品乱码| 国产一级伦理片| 日韩电影免费在线观看网站| 日本一区二区不卡| 丰满的护士2在线观看高清| 亚洲综合精品视频| 欧美xxxxxxxxx| 99久久精品费精品国产一区二区| 91视频久久久| 欧美在线观看黄| 视频一区二区在线| 中文字幕色呦呦| 免费视频一区三区| 九九热在线免费| 国产精品综合久久| 激情伦成人综合小说| 麻豆视频一区| 久久亚洲国产成人亚| 人妻无码中文字幕免费视频蜜桃| 91在线高清观看| 国产av无码专区亚洲av| 欧美性色黄在线视频| 久久99国产精品久久久久久久久| 国产一区二区三区在线观看精品| 91麻豆精品国产91久久久更新资源速度超快| 欧美精品第1页| 日本韩国欧美一区二区三区| 精品美女被调教视频大全网站| 国产超级av| 亚洲精品一区av在线播放| 成人精品福利视频| 最近的2019中文字幕免费一页| 日本三级理论片| 亚洲国产精品一区二区久久恐怖片| 黄色网址网站在线观看| av亚洲产国偷v产偷v自拍| 国内不卡的一区二区三区中文字幕| 欧美日韩免费观看视频| www视频在线| 精品卡一卡卡2卡3网站| 少妇高清精品毛片在线视频| 日韩黄色免费电影| 国产乱人乱偷精品视频| 久久久久久爱| 欧美激情视频播放| 一区二区三区四区视频免费观看| 性猛交xxxx乱大交孕妇印度| 99亚洲乱人伦aⅴ精品| 第一社区sis001原创亚洲| 国产成人福利视频| 国产精品一区二区中文字幕| 二区三区不卡不卡视频| 亚洲综合无码一区二区| 欧美成人嫩草网站| 国产亚洲第一伦理第一区|