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

首頁 > 系統 > iOS > 正文

iOS開發之Quartz2D的介紹與使用詳解

2020-07-26 02:53:15
字體:
來源:轉載
供稿:網友

一、前言

Quartz2D的API是純C語言的,它是一個二維繪圖引擎,同時支持iOS和Mac系統。Quartz2D的API來自于Core Graphics框架,數據類型和函數基本都以CG作為前綴。通常,我們可以使用系統提供的控件去完成大部分UI,但是有些UI界面極其復雜、而且比較個性化,用普通的UI控件無法實現,這時可以利用Quartz2D技術將控件內部的結構畫出來,類似自定義控件。其實,iOS中大部分控件的內容都是通過Quartz2D畫出來的,因此,Quartz2D在iOS開發中很重要的一個價值是:自定義view(自定義UI控件)。

Quartz 2D能完成的工作:

  1. 繪制圖形 : 線條/三角形/矩形/圓/弧等;
  2. 繪制文字;
  3. 繪制/生成圖片(圖像);
  4. 讀取/生成PDF;
  5. 截圖/裁剪圖片;
  6. 自定義UI控件;
  7. … …

二、圖形上下文(Graphics Context)

圖形上下文(Graphics Context):是一個CGContextRef類型的數據。

圖形上下文的作用:

(1)保存繪圖信息、繪圖狀態

(2)決定繪制的輸出目標(繪制到什么地方去?)

(輸出目標可以是PDF文件、Bitmap或者顯示器的窗口上)

相同的一套繪圖序列,指定不同的Graphics Context,就可將相同的圖像繪制到不同的目標上。

Quartz2D提供了以下幾種類型的Graphics Context:

(1)Bitmap Graphics Context

(2)PDF Graphics Context

(3)Window Graphics Context

(4)Layer Graphics Context

(5)Printer Graphics Context

將當前的上下文copy一份,保存到棧頂(那個棧叫做”圖形上下文棧”):

void CGContextSaveGState(CGContextRef c)

將棧頂的上下文出棧,替換掉當前的上下文(清空之前對于上下文設置):

void CGContextRestoreGState(CGContextRef c)

三、使用Quartz2D自定義View

1、Quartz2D自定義view

如何利用Quartz2D自定義view?(自定義UI控件)如何利用Quartz2D繪制東西到view上?

首先,得有圖形上下文,因為它能保存繪圖信息,并且決定著繪制到什么地方去。

其次,那個圖形上下文必須跟view相關聯,才能將內容繪制到view上面。

自定義view的步驟:

(1)新建一個類,繼承自UIView

(2)實現- (void)drawRect:(CGRect)rect方法,然后在這個方法中

(a)取得跟當前view相關聯的圖形上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

(b)繪制相應的圖形內容

例如:畫1/4圓(扇形)

CGContextMoveToPoint(ctx, 100, 100); CGContextAddLineToPoint(ctx, 100, 150); CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI, 1); CGContextClosePath(ctx);  [[UIColor redColor] set];

(3)利用圖形上下文將繪制的所有內容渲染顯示到view上面

CGContextFillPath(ctx);

注:

//M_PI的含義:π//M_PI * 2的含義:2π //M_PI_2的含義:π/2//M_PI / 2的含義:π/2 // 畫的圖形路徑//bezierPathWithArcCenter:弧所在的圓心//radius:圓的半徑//startAngle:開始角度,圓的最右側為0度//endAngle:截至角度,向下為正,向上為負.//clockwise:時針的方向,yes:順時針 no:逆時針UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:self.center radius:radius startAngle:startA endAngle:endA clockwise:NO];

完整代碼:

//// MyView.m// Quartz2DTest//// Created by 李峰峰 on 2017/2/6.// Copyright © 2017年 李峰峰. All rights reserved.// #import "MyView.h" @implementation MyView - (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor whiteColor];//設置背景為白色,為了便于觀察繪制后的效果 } return self;}  - (void)drawRect:(CGRect)rect {  CGContextRef ctx = UIGraphicsGetCurrentContext();  CGContextMoveToPoint(ctx, 100, 100); CGContextAddLineToPoint(ctx, 100, 150); CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI, 1); CGContextClosePath(ctx);  [[UIColor redColor] set];  CGContextFillPath(ctx); } @end

運行效果:

2、核心方法drawRect:

為什么要實現drawRect:方法才能繪圖到view上?

因為在drawRect:方法中才能取得跟view相關聯的圖形上下文

drawRect:方法在什么時候被調用?

當view第一次顯示到屏幕上時(被加到UIWindow上顯示出來)

調用view的setNeedsDisplay或者setNeedsDisplayInRect:時.

注意4點:

  1. 手動調用drawRect:方法,不會自動創建跟View相關聯的上下文。應該調用setNeedsDisplay方法,系統底層會自動調用drawRect,告訴系統重新繪制View.這樣,系統底層會自動創建跟View相關聯的上下文
  2. setNeedsDisplay底層會調用drawRect,并不是立馬調用的.只是設了一個調用的標志.調用時刻是等下一次屏幕刷新時才去調用drawRect。屏幕每一秒刷新30-60秒次,所以1秒調用drawRect方法大概30-60次,速度非常快哦
  3. view內部有個layer(圖層)屬性,drawRect:方法中取得的是一個Layer Graphics Context,因此,繪制的東西其實是繪制到view的layer上去了
  4. View之所以能顯示東西,完全是因為它內部的layer

3、Quartz2D繪圖的代碼步驟

第一步:獲得圖形上下文:

CGContextRef ctx = UIGraphicsGetCurrentContext();

第二步:拼接路徑(下面代碼是繪制一條線段):

CGContextMoveToPoint(ctx, 10, 10);CGContextAddLineToPoint(ctx, 100, 100);

第三步:繪制路徑:

CGContextStrokePath(ctx); // CGContextFillPath(ctx);

四、Quartz2D重要函數

1、常用拼接路徑函數

新建一個起點

void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)

添加新的線段到某個點

void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)

添加一個矩形

void CGContextAddRect(CGContextRef c, CGRect rect)

添加一個橢圓

void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)

添加一個圓弧

void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)

2、常用繪制路徑函數

一般以CGContextDraw、CGContextStroke、CGContextFill開頭的函數,都是用來繪制路徑的。

Mode參數決定繪制的模式

void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode)

繪制空心路徑

void CGContextStrokePath(CGContextRef c)

繪制實心路徑

void CGContextFillPath(CGContextRef c)

3、矩陣操作函數

利用矩陣操作,能讓繪制到上下文中的所有路徑一起發生變化。

縮放:

void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)

旋轉:

void CGContextRotateCTM(CGContextRef c, CGFloat angle)

平移:

void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty)

4、其他常用函數

設置線段寬度

CGContextSetLineWidth(ctx, 10);

設置線段頭尾部的樣式

CGContextSetLineCap(ctx, kCGLineCapRound);

設置線段轉折點的樣式

CGContextSetLineJoin(ctx, kCGLineJoinRound);

設置顏色

CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);

五、Quartz2D的內存管理

關于Quartz2D內存管理,有以下原則:

(1)使用含有“Create”或“Copy”的函數創建的對象,使用完后必須釋放,否則將導致內存泄露。

(2)使用不含有“Create”或“Copy”的函數獲取的對象,則不需要釋放

(3)如果retain了一個對象,不再使用時,需要將其release掉。

(4)可以使用Quartz 2D的函數來指定retain和release一個對象。例如,如果創建了一個CGColorSpace對象,則使用函數CGColorSpaceRetain和CGColorSpaceRelease來retain和release對象。

(5)也可以使用Core Foundation的CFRetain和CFRelease。注意不能傳遞NULL值給這些函數。

六、Quartz2D使用案例

1、畫矩形、正方形

- (void)drawRect:(CGRect)rect {  //1.獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //2.描述路徑 UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 200)]; //3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath);  [[UIColor redColor] set];// 路徑的顏色  //4.把上下文的內容渲染到View的layer. //CGContextStrokePath(ctx);// 描邊路徑 CGContextFillPath(ctx);// 填充路徑 }

運行效果:

2、畫扇形

除上面“二、使用Quartz2D自定義View”中的方法外,也可以使用OC中自帶畫圖方法實現,如下:

- (void)drawRect:(CGRect)rect {  CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5); CGFloat radius = rect.size.width * 0.5 - 10; CGFloat startA = 0; CGFloat endA = -M_PI_2; // 畫弧的路徑 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:NO]; // 添加一根線到圓心 [path addLineToPoint:center]; // 閉合路徑 [path closePath]; // 路徑顏色 [[UIColor redColor] set]; // 填充路徑 [path fill]; // 描邊路徑 //[path stroke]; }

運行效果:

注:

判斷一個點是否在一個矩形框內

CGRectContainsPoint(rect,point);//判斷point這個點是否在rect這個矩形框內

3、畫圓形

- (void)drawRect:(CGRect)rect {  //1.獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //2.描述路徑 // cornerRadius:圓角半徑。矩形的寬高都為200,如果圓角為100,那么兩個角之間弧線上任意一點到矩形中心的距離都為100,所以為圓形 UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(50, 50, 200, 200) cornerRadius:100]; //3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath);  [[UIColor redColor] set];// 路徑的顏色  //4.把上下文的內容渲染到View的layer. // CGContextStrokePath(ctx);// 描邊路徑 CGContextFillPath(ctx);// 填充路徑 }

運行效果:

4、畫圓角矩形

- (void)drawRect:(CGRect)rect {  //1.獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //2.描述路徑 // cornerRadius:圓角半徑。 UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(50, 50, 200, 200) cornerRadius:50]; //3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath);  [[UIColor redColor] set];// 路徑的顏色  //4.把上下文的內容渲染到View的layer. CGContextStrokePath(ctx);// 描邊路徑 //CGContextFillPath(ctx);// 填充路徑 }

運行效果:

5、畫直線

- (void)drawRect:(CGRect)rect {  //1.獲取跟View相關聯的上下文(uigraphics開頭) CGContextRef ctx = UIGraphicsGetCurrentContext();  //2.描述路徑 //一條路徑可以繪制多條線 路徑:path  路徑繪制多條線:path使用了兩次(2次的起點到終點),都是將線添加到某個點 UIBezierPath *path = [UIBezierPath bezierPath]; //設置起點 [path moveToPoint:CGPointMake(50, 150)]; //添加一根線Line到某個點 [path addLineToPoint:CGPointMake(250, 50)];  //畫第二根線 [path moveToPoint:CGPointMake(50, 250)]; [path addLineToPoint:CGPointMake(250, 100)];  //設置線寬 CGContextSetLineWidth(ctx, 20); //設置線的連接樣式 CGContextSetLineJoin(ctx, kCGLineJoinBevel); //設置線的頂角樣式 CGContextSetLineCap(ctx, kCGLineCapRound);// 圓角線條 //設置線條顏色 [[UIColor redColor] set];  //3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath); //4.把上下文當中繪制的內容渲染到跟View關聯的layer CGContextStrokePath(ctx); }

運行效果:

6、畫曲線

本塞爾曲線原理:

- (void)drawRect:(CGRect)rect {  //1.獲取跟View相關聯的上下文.】 CGContextRef ctx = UIGraphicsGetCurrentContext(); //2.描述路徑 UIBezierPath *path = [UIBezierPath bezierPath]; //畫曲線,設置起點.還有一個控制點(用來控制曲線的方向跟彎曲程度) //設置起點 [path moveToPoint:CGPointMake(10, 150)]; //添加一要曲線到某個點 [path addQuadCurveToPoint:CGPointMake(200, 150) controlPoint:CGPointMake(150, 10)]; //3.把路徑添加到上下文當中 CGContextAddPath(ctx, path.CGPath); //4.把上下文的內容渲染View上 CGContextStrokePath(ctx); }

運行效果:

7、畫餅圖

方法1:

- (void)drawRect:(CGRect)rect {  NSArray *dataArray = @[@25,@25,@50]; // 畫弧 CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5); // 半徑 CGFloat radius = rect.size.width * 0.5 - 10;  CGFloat startA = 0; CGFloat angle = 0; CGFloat endA = 0;  for (NSNumber *num in dataArray) {  startA = endA;  // 遍歷出第一個對象25,angle =25/100 *2π,即angle = π/2,所以為1/4圓,  angle = num.intValue / 100.0 * M_PI * 2;  // 截至角度= 開始的角度+ 遍歷出的對象所占整個圓形的角度  endA = startA + angle;  // 順勢針畫貝塞爾曲線  UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];  // 設置隨機顏色  [[self randomColor] set];  // 添加一根線到圓心  [path addLineToPoint:center];  // 填充路徑  [path fill];  // 描邊路徑//  [path stroke]; } }  /** 生成隨機顏色  @return UIColor */-(UIColor *)randomColor{  CGFloat redLevel = rand() / (float) RAND_MAX; CGFloat greenLevel = rand() / (float) RAND_MAX; CGFloat blueLevel = rand() / (float) RAND_MAX;  return [UIColor colorWithRed: redLevel green: greenLevel blue: blueLevel alpha: 1.0];}

運行效果:

方法二:

- (void)drawRect:(CGRect)rect {  CGPoint center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * .5); CGFloat radius = self.bounds.size.width * 0.5 - 10; CGFloat startA = 0; CGFloat endA = 25 / 100.0 * M_PI * 2; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; [[UIColor redColor] set]; //添加一根線到圓心 [path addLineToPoint:center]; [path fill];  //第二個扇形 startA = endA; CGFloat angle = 25 / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path2 = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; [[UIColor greenColor] set]; //添加一根線到圓心 [path2 addLineToPoint:center]; [path2 fill];  startA = endA; angle = 50 / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path3 = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; [[UIColor blueColor] set]; //添加一根線到圓心 [path3 addLineToPoint:center]; [path3 fill]; }  /** 生成隨機顏色  @return UIColor */-(UIColor *)randomColor{  CGFloat redLevel = rand() / (float) RAND_MAX; CGFloat greenLevel = rand() / (float) RAND_MAX; CGFloat blueLevel = rand() / (float) RAND_MAX;  return [UIColor colorWithRed: redLevel green: greenLevel blue: blueLevel alpha: 1.0];}

注:

如果想實現點擊以下變換顏色可以加上如下代碼:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {  //重繪 [self setNeedsDisplay]; }

8、繪制文字

- (void)drawRect:(CGRect)rect {  NSString *str = @"李峰峰博客:http://www.imlifengfeng.com/";  NSMutableDictionary *dict = [NSMutableDictionary dictionary]; //設置字體 dict[NSFontAttributeName] = [UIFont systemFontOfSize:30]; //設置顏色 dict[NSForegroundColorAttributeName] = [UIColor redColor]; //設置描邊 dict[NSStrokeColorAttributeName] = [UIColor blueColor]; dict[NSStrokeWidthAttributeName] = @3; //設置陰影 NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor greenColor]; shadow.shadowOffset = CGSizeMake(-2, -2); shadow.shadowBlurRadius = 3; dict[NSShadowAttributeName] = shadow;  //設置文字的屬性 //drawAtPoint不會自動換行 //[str drawAtPoint:CGPointMake(0, 0) withAttributes:dict]; //drawInRect會自動換行 [str drawInRect:self.bounds withAttributes:dict]; }

運行效果:

9、加水印

//// ViewController.m// Quartz2DTest//// Created by 李峰峰 on 2017/2/6.// Copyright © 2017年 李峰峰. All rights reserved.// #import "ViewController.h"#import "MyView.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];  UIImageView *myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; [self.view addSubview:myImageView];   //生成一張圖片 //0.加載圖片 UIImage *oriImage = [UIImage imageNamed:@"test"]; //1.創建位圖上下文(size:開啟多大的上下文,就會生成多大的圖片) UIGraphicsBeginImageContext(oriImage.size); //2.把圖片繪制到上下文當中 [oriImage drawAtPoint:CGPointZero]; //3.繪制水印(雖說UILabel可以快速實現這種效果,但是我們也可以繪制出來) NSString *str = @"李峰峰博客";   NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict[NSFontAttributeName] = [UIFont systemFontOfSize:20]; dict[NSForegroundColorAttributeName] = [UIColor redColor];  [str drawAtPoint:CGPointZero withAttributes:dict]; //4.從上下文當中生成一張圖片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //5.關閉位圖上下文 UIGraphicsEndImageContext();   myImageView.image = newImage; } @end

運行效果:

10、屏幕截圖

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {  //生成圖片 //1.開啟一個位圖上下文 UIGraphicsBeginImageContext(self.view.bounds.size); //2.把View的內容繪制到上下文當中 CGContextRef ctx = UIGraphicsGetCurrentContext(); //UIView內容想要繪制到上下文當中, 必須使用渲染的方式 [self.view.layer renderInContext:ctx]; //3.從上下文當中生成一張圖片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //4.關閉上下文 UIGraphicsEndImageContext(); //把圖片轉成二進制流 //NSData *data = UIImageJPEGRepresentation(newImage, 1); NSData *data = UIImagePNGRepresentation(newImage);  [data writeToFile:@"/Users/lifengfeng/Downloads/imlifengfeng.jpg" atomically:YES]; }

運行效果:

截圖而已,就跟普通截圖一樣,自己試。

總結

以上就是關于Quartz2D一些常用的案例,Quartz2D還可以實現更多效果,具體的根據需求去實現。希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人福利在线观看| 国产欧美va欧美va香蕉在线| 最近2019中文字幕一页二页| 美日韩丰满少妇在线观看| 欧美精品www在线观看| 一二美女精品欧洲| 国产欧美日韩丝袜精品一区| 深夜福利国产精品| 精品日韩视频在线观看| 92看片淫黄大片欧美看国产片| 久久夜色精品国产| 欧美激情一区二区三区高清视频| 国产va免费精品高清在线| 欧美激情18p| 91久久精品日日躁夜夜躁国产| 2019最新中文字幕| 日韩精品视频中文在线观看| 欧美夫妻性生活视频| 国产精品高清网站| 国产精品海角社区在线观看| 国产午夜精品全部视频播放| 91亚洲精华国产精华| 中文精品99久久国产香蕉| 亚洲精品中文字幕女同| 日韩国产精品亚洲а∨天堂免| 麻豆国产va免费精品高清在线| 国产日韩专区在线| 亚洲人午夜色婷婷| 国产视频精品va久久久久久| 激情成人中文字幕| 国产精品嫩草视频| 91国偷自产一区二区三区的观看方式| 亚洲福利影片在线| 日韩大陆欧美高清视频区| 国产91在线视频| 国产一区二区美女视频| 国产精品户外野外| 欧美日韩国产精品一区| 91色p视频在线| 国产亚洲视频中文字幕视频| 久久视频国产精品免费视频在线| 日韩国产在线看| 美女啪啪无遮挡免费久久网站| 色噜噜狠狠色综合网图区| 国产精品九九九| 欧美第一黄色网| 久久久久久久999精品视频| 久久综合伊人77777尤物| 中文字幕久久精品| 日韩av电影在线免费播放| 久久69精品久久久久久国产越南| 欧美亚洲国产精品| 亚洲最大的网站| 中文在线资源观看视频网站免费不卡| 亚洲激情在线观看视频免费| 91精品国产91久久久久福利| 亚洲精品自产拍| 亚洲自拍偷拍一区| 欧美成人激情视频| 成人性教育视频在线观看| 国产视频精品在线| 成人欧美在线视频| 欧美亚洲在线观看| 色与欲影视天天看综合网| 亚洲网站在线看| 亚洲性猛交xxxxwww| 亚洲大胆人体视频| 精品日韩中文字幕| 亚洲国产精彩中文乱码av在线播放| 亚洲激情视频网| 成人久久精品视频| 欧美激情视频播放| 久久香蕉国产线看观看网| 中文字幕一区电影| 97av视频在线| 亚洲天堂av在线播放| 91av在线播放视频| 91久久久久久久一区二区| 国产精品99久久99久久久二8| 欧美巨猛xxxx猛交黑人97人| 在线观看成人黄色| 尤物九九久久国产精品的分类| 亚洲少妇激情视频| 精品国产拍在线观看| 日韩在线视频国产| 2021国产精品视频| 欧美极品少妇全裸体| 在线成人激情黄色| 亚洲片国产一区一级在线观看| 精品视频在线导航| 日韩美女中文字幕| 欧美日韩综合视频网址| 国产一区二区三区中文| 亚洲成成品网站| 另类视频在线观看| 欧美视频在线免费| 91国内揄拍国内精品对白| 国产亚洲人成a一在线v站| 欧美成人免费在线观看| 国产精品久久久久999| 国内精品久久久久久| 亚洲自拍小视频免费观看| 久久手机免费视频| 午夜精品一区二区三区在线视频| www.日韩系列| 精品国产区一区二区三区在线观看| 亚洲精品久久7777777| 亚洲老头同性xxxxx| 亚洲国内高清视频| 最新国产精品亚洲| 国产精品视频最多的网站| 成人在线精品视频| 日韩成人在线视频| 美女久久久久久久久久久| 97精品一区二区视频在线观看| 欧美精品18videos性欧| 日韩国产中文字幕| 68精品国产免费久久久久久婷婷| 国产精品久久久久久久久久久不卡| 大量国产精品视频| 欧美国产日韩免费| 国产精品久久久久久亚洲影视| 国产精品99一区| 欧美日韩中文字幕综合视频| 欧美性猛交丰臀xxxxx网站| 亚洲第一精品夜夜躁人人躁| 国产亚洲精品综合一区91| 青青草成人在线| 日韩欧美中文在线| 欧美在线欧美在线| 亚洲理论片在线观看| 国产日韩在线观看av| 日韩av在线导航| 国产一区二区在线播放| 亚洲第一偷拍网| 欧美一区深夜视频| 亚洲一区二区中文| 久久中文字幕在线| 日韩激情在线视频| 日韩国产在线播放| 97成人精品区在线播放| 国产+成+人+亚洲欧洲| 久久人人爽人人爽人人片av高清| 欧美电影免费观看网站| 国产91精品在线播放| 国产一区二区成人| 成人国产精品一区| 国产成人免费av| 免费97视频在线精品国自产拍| 国产日韩欧美夫妻视频在线观看| 97精品欧美一区二区三区| 亚洲片国产一区一级在线观看| 伊人久久久久久久久久久| 国产精品福利片| 国产精品亚洲网站| 久久的精品视频| 成人亚洲欧美一区二区三区| 亚洲一区av在线播放| 久久久国产精品视频| 久久精品国产亚洲一区二区| 一区二区三区四区视频| 亚洲xxx自由成熟| 日韩激情av在线播放| 亚洲精品视频久久|