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

如何使用PHPicker在iOS系統(tǒng)無(wú)授權(quán)下獲取資源

移動(dòng)開(kāi)發(fā) iOS
在本篇文章中,我將詳細(xì)介紹如何正確使用PHPicker以及何時(shí)應(yīng)該使用PHPicker。我撰寫(xiě)這篇文章的原因是:在嘗試使用PHPicker訪(fǎng)問(wèn)資源庫(kù)時(shí)遇到了一些問(wèn)題。互聯(lián)網(wǎng)上的許多文章提供的方法都是錯(cuò)誤的,從而導(dǎo)致了對(duì)PHPicker和iOS權(quán)限的一些核心問(wèn)題的誤解。

自iOS14系統(tǒng)開(kāi)始,蘋(píng)果加強(qiáng)了用戶(hù)隱私和安全功能。新增了“Limited Photo Library Access”模式,同時(shí)在授權(quán)彈窗中增加了“Select Photo”選項(xiàng)。這意味著用戶(hù)可以在應(yīng)用程序請(qǐng)求訪(fǎng)問(wèn)相冊(cè)時(shí)選擇部分照片供應(yīng)用程序讀取。從應(yīng)用程序的角度來(lái)看,它只能訪(fǎng)問(wèn)到用戶(hù)選擇的這幾張照片,無(wú)法得知其他照片的存在。然而,并非所有普通用戶(hù)都能夠正確理解這一機(jī)制,實(shí)際用戶(hù)反饋中也反映出了一些誤解。蘋(píng)果推薦使用新的PHPicke來(lái)解決這個(gè)問(wèn)題。

在本篇文章中,我將詳細(xì)介紹如何正確使用PHPicker以及何時(shí)應(yīng)該使用PHPicker。我撰寫(xiě)這篇文章的原因是:在嘗試使用PHPicker訪(fǎng)問(wèn)資源庫(kù)時(shí)遇到了一些問(wèn)題。互聯(lián)網(wǎng)上的許多文章提供的方法都是錯(cuò)誤的,從而導(dǎo)致了對(duì)PHPicker和iOS權(quán)限的一些核心問(wèn)題的誤解。

01PHPicker是什么?

從iOS14開(kāi)始,PHPicker是系統(tǒng)提供的Picker ,它允許你從用戶(hù)的照片庫(kù)中訪(fǎng)問(wèn)照片和視頻。新的PHPicker類(lèi)不是在UIKit框架中的,而是位于PhotosUI框架中,包括:

  • PHPickerViewController
  • PHPickerConfiguration
  • PHPickerFilter
  • PHPickerResult

當(dāng)你展現(xiàn)一個(gè)PHPickerViewController,它有一個(gè)PHPickerConfiguration配置來(lái)告訴它要選擇多少個(gè)媒體項(xiàng),以及需要選擇的媒體類(lèi)型。通過(guò) PHPickerConfiguration的filter屬性,配置可選擇的媒體類(lèi)型,它的選項(xiàng)可以是任意組合:圖片、實(shí)況照片或視頻。通過(guò)PHPickerConfiguration的selectionLimit屬性來(lái)配置用戶(hù)可以選擇的媒體項(xiàng)數(shù)量。

let photoLibrary = PHPhotoLibrary.shared()
var config = PHPickerConfiguration(photoLibrary: photoLibrary)
                        
let selectedCount = self.albumViewModel.selectArray.count
let limited = min(4-selectedCount, 4)
config.selectionLimit = (type == .pic ? limited : 1)
config.filter = (type == .pic ? .images : .videos)
let pickerViewController = PHPickerViewController(configuration: config)
pickerViewController.delegate = self
self.viewController?.present(pickerViewController, ani

圖片圖片

02真的需要用戶(hù)授權(quán)嗎?

當(dāng)用戶(hù)給予受限訪(fǎng)問(wèn)模式時(shí),如果需要獲得未授權(quán)的額外資源,網(wǎng)絡(luò)上很多文章建議你使用PHAsset和PHPicker來(lái)獲取額外的數(shù)據(jù),這樣做的問(wèn)題是,你必須具有訪(fǎng)問(wèn)資源庫(kù)的權(quán)限,這違背了蘋(píng)果建議的使用PHPicker的初衷:在不請(qǐng)求權(quán)限的情況下使用的選擇器。

我們來(lái)模擬一下流程:你的的應(yīng)用程序請(qǐng)求訪(fǎng)問(wèn)用戶(hù)資源庫(kù)的權(quán)限,用戶(hù)說(shuō):“我將只給這個(gè)應(yīng)用程序有限的訪(fǎng)問(wèn)一些照片。” 此時(shí),如果你的應(yīng)用程序打開(kāi)PHPicker并顯示所有的照片;用戶(hù)說(shuō):“奇怪,我以為我只給有限的訪(fǎng)問(wèn)權(quán)限,為什么所有照片都有?”;接下來(lái),用戶(hù)選擇了一張他沒(méi)有給我們?cè)L問(wèn)權(quán)限的照片。應(yīng)用程序現(xiàn)在需要什么都不做,為了使用PHAsset獲得他選擇的照片的元數(shù)據(jù)(metadata),他們必須再次更新他們的權(quán)限。用戶(hù)感到困惑。

所以,如果你的目的非常明確,就是需要用戶(hù)給予額外的資源授權(quán)來(lái)獲得 PHAsset 對(duì)象,應(yīng)該使用iOS14的新API PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: vc),反之,使用 PHPicker不應(yīng)該申請(qǐng)獲得用戶(hù)授權(quán),正確的做法是使用 PHPickerViewControllerDelegate返回的NSItemProvider獲得元數(shù)據(jù)(metadata)信息,我將在稍后詳細(xì)介紹。

03使用PHPicker的方式

1、錯(cuò)誤方式

下面這段代碼是網(wǎng)絡(luò)上廣泛被轉(zhuǎn)載的一段錯(cuò)誤代碼:

import UIKit
import PhotosUI
class PhotoKitPickerViewController: UIViewController, PHPickerViewControllerDelegate {
    @IBAction func presentPicker(_ sender: Any) {
        let photoLibrary = PHPhotoLibrary.shared()
  let configuration = PHPickerConfiguration(photoLibrary: photoLibrary)
  let picker = PHPickerViewController(configuration: configuration)
  picker.delegate = self
  present(picker, animated: true)
 }
  
 func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
  picker.dismiss(animated: true)
  let identifiers = results.compactMap(\.assetIdentifier)
  let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
    
  // TODO: Do something with the fetch result if you have Photos Library access
 }
}

在這段代碼中,你使用PHPickerViewController選擇了受限制的資源,但是在調(diào)用PHAsset.fetchAssets時(shí)返回了一個(gè)空結(jié)果。這是因?yàn)閒etchAssets方法只能檢索用戶(hù)授權(quán)訪(fǎng)問(wèn)的所有資源,而在受限制模式下,只有最近的受限制資源可供訪(fǎng)問(wèn),所以這種方式是錯(cuò)誤的!

2、正確方式

PHAsset不應(yīng)該與PHPicker一起使用,這不是使用PHPickeri的正確方法!應(yīng)該使用NSItemProvider。NSItemProvider是一個(gè)項(xiàng)目提供程序,用于在拖放或復(fù)制/粘貼活動(dòng)期間在進(jìn)程之間傳輸數(shù)據(jù)或文件,或者從主機(jī)應(yīng)用程序到應(yīng)用程序擴(kuò)展。使用itemProvider,可以讀取對(duì)象的類(lèi)型,并根據(jù)它是照片、視頻還是其他內(nèi)容來(lái)處理它。比較合適的方式如下所示:

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)
    for result in results {
        let itemProvider: NSItemProvider = result.itemProvider;
        if(itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier)) {
            // 圖片處理
        } else  if(itemProvider.hasItemConformingToTypeIdentifier(UTType.movie.identifier)) {
            // 視頻處理
        } else {
            // 其他,暫時(shí)忽略
        }
    }
}

04獲得圖片與圖片元數(shù)據(jù)

通過(guò)前一步驟,我們已經(jīng)知道了資源的類(lèi)型。接下來(lái)通過(guò)NSItemProvider的API加載圖片內(nèi)容和獲得元數(shù)據(jù)信息;查閱 NSItemProvider(1)文檔,可以看到加載數(shù)據(jù),主要提供了下面幾種API:

  • loadDataRepresentation:返回資源Data數(shù)據(jù)
  • loadFileRepresentation:返回資源URL
  • loadObject:指定資源類(lèi)型返回

這里我推薦使用 loadDataRepresentation,返回Data數(shù)據(jù),方便下一步獲得元數(shù)據(jù)信息。

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)
    for result in results {
        let itemProvider: NSItemProvider = result.itemProvider;
        if(itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier)) {
            // 圖片處理
            itemProvider.loadDataRepresentation(forTypeIdentifier: UTType.image.identifier) { data, error in
                    //處理業(yè)務(wù)model轉(zhuǎn)換
                    if let model = self.createPhotoResourcesModel(data: data, assetIdentifier: assetIdentifier){
                        self.albumViewModel.selectArrayAddObject(model)
                        
                        DispatchQueue.main.async {
                            //更新UI
                        }
                    }
              }
            
        } else  if(itemProvider.hasItemConformingToTypeIdentifier(UTType.movie.identifier)) {
            // 視頻處理
        } else {
            // 其他,暫時(shí)忽略
        }
    }
}

在處理業(yè)務(wù)model轉(zhuǎn)換函數(shù)中,由于Data類(lèi)型很容易轉(zhuǎn)換成UIImage,并且通過(guò)將Data轉(zhuǎn)換為CFData 類(lèi)型,可以通過(guò)系統(tǒng)預(yù)設(shè)的key/value鍵值對(duì)獲得元數(shù)據(jù)信息,

let imgSrc = CGImageSourceCreateWithData(data, options as CFDictionary)
let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options as CFDictionary)
colorModel = metadata[kCGImagePropertyColorModel] as? String
pixelWidth = metadata[kCGImagePropertyPixelWidth] as? Double;
pixelHeight = metadata[kCGImagePropertyPixelHeight] as? Double;

這里我們使用了Github上開(kāi)源的 ExifData(2) 代碼,完整實(shí)現(xiàn)了所有字段的獲取封裝,使用起來(lái)非常方便。

func createPhotoResourcesModel(data:Data?,
                            assetIdentifier:String?) -> SNSResourcesModel? {
        guard let imageData = data, let uiimage = UIImage(data: imageData) else {
            return nil
        }
        let model = SNSResourcesModel()
        model.assetLocalIdentifier = assetIdentifier
        model.assetType = .photo
        model.assetSource = .album
        model.originImage = uiimage
        model.bigPreviewImage = uiimage
        
        let exifData = ExifData(data: imageData)
        model.pixelWidth = Int(exifData.pixelWidth ?? 0)
        model.pixelHeight = Int(exifData.pixelHeight ?? 0)
        if imageData.imageType == .GIF{
            model.isGif = true
            model.gifData = imageData
        }
        return model
}

05處理特殊格式圖片

如果用戶(hù)在資源庫(kù)中選擇了一張WebP格式圖片或者GIF動(dòng)圖,由于展示所需代碼和形式均不同,所以需要特別區(qū)分,那么如何來(lái)區(qū)別處理呢?

我們可以通過(guò)UTType來(lái)具體區(qū)分不同類(lèi)型,UTType是Uniform Type Identifier的縮寫(xiě),用于標(biāo)識(shí)特定類(lèi)型的文件或數(shù)據(jù)。在macOS和iOS等操作系統(tǒng)中,UTType通常用于識(shí)別文件類(lèi)型、將文件分組到合適的應(yīng)用程序中、在不同應(yīng)用程序之間共享數(shù)據(jù)等。

UTType由兩部分組成:類(lèi)型標(biāo)識(shí)符(type identifier)和類(lèi)型標(biāo)簽(type tag)。類(lèi)型標(biāo)識(shí)符是一串唯一的字符串,用于標(biāo)識(shí)特定類(lèi)型的文件或數(shù)據(jù),通常采用反向DNS風(fēng)格的命名方式,如com.adobe.pdf、public.image等。類(lèi)型標(biāo)簽是一個(gè)可選的字符串,用于描述特定類(lèi)型的文件或數(shù)據(jù),例如"PDF document"或"JPEG image"等。

if(itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier)) {
    // 圖片處理
    // 判斷webp
    if itemProvider.hasItemConformingToTypeIdentifier(UTType.webP.identifier){
        //處理webp
    }
    //判斷GIF
    if itemProvider.hasItemConformingToTypeIdentifier(UTType.gif.identifier){
        //處理GIF
    }        
}

06獲得視頻

獲得視頻時(shí),推薦使用loadFileRepresentation,返回URL,通過(guò)URL可以獲得 AVAsset。

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)
    for result in results {
        let itemProvider: NSItemProvider = result.itemProvider;
        if(itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier)) {
            // 圖片處理
        } else  if(itemProvider.hasItemConformingToTypeIdentifier(UTType.movie.identifier)) {
            // 視頻處理
            itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { url, error in
                    //業(yè)務(wù)model轉(zhuǎn)換
                    if let model = self.createVideoResourcesModel(url: url, assetIdentifier: assetIdentifier){
                        self.albumViewModel.selectArrayAddObject(model)
                        
                        DispatchQueue.main.async {
                            //展示UI
                        }
                    }
            }
        } else {
            // 其他,暫時(shí)忽略
        }
    }
}

07獲取加載進(jìn)度

當(dāng)獲取的資源文件較大時(shí),我們需要獲得加載數(shù)據(jù)的進(jìn)度,此時(shí)可以使用 NSItemProvider的加載數(shù)據(jù)函數(shù)提供的返回值NSProgress對(duì)象。

var progress:Progress?
progress = itemProvider.loadDataRepresentation(forTypeIdentifier: UTType.image.identifier) { data, error in
    //...
}
//添加觀(guān)察者
progress?.addObserver(self, forKeyPath: "fractionCompleted", options: [.new], context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "fractionCompleted" {
        print("fractinotallow=\(self.progress?.fractionCompleted)")
    }
}

在上面的示例代碼中,我們首先創(chuàng)建了一個(gè)NSItemProvider對(duì)象和一個(gè)指定類(lèi)型標(biāo)識(shí)符。然后,我們使用 loadDataRepresentation(forTypeIdentifier:completionHandler:) 方法加載數(shù)據(jù),并返回一個(gè)NSProgress對(duì)象。我們可以將該對(duì)象添加為觀(guān)察者,并在觀(guān)察者的回調(diào)方法中更新進(jìn)度條的值。

請(qǐng)注意,NSProgress對(duì)象是線(xiàn)程安全的,因此可以在不同的線(xiàn)程中使用。此外,如果你需要在多個(gè)地方使用同一個(gè)NSProgress對(duì)象;

NSProgress對(duì)象的fractionCompleted屬性,該屬性表示任務(wù)的完成度,其值在0.0和1.0之間。

06總結(jié)

本文要點(diǎn)包含以下:

  • PHPicker是iOS14開(kāi)始引入的新組件,它允許在不需要用戶(hù)授權(quán)的情況下訪(fǎng)問(wèn)照片庫(kù)的所有資源;
  • 使用PHPicker的正確方式是通過(guò)PHPickerViewControllerDelegate回調(diào)返回的NSItemProvider來(lái)獲取所選資源,而不是通過(guò)PHAsset來(lái)獲取,后者需要提前獲取用戶(hù)的相冊(cè)訪(fǎng)問(wèn)授權(quán);
  • 通過(guò)NSItemProvider可以判斷資源類(lèi)型,加載資源數(shù)據(jù)或文件URL,獲取圖片、視頻等多媒體資源;
  • 對(duì)于圖片,可以通過(guò)loadDataRepresentation獲取Data,并利用該Data獲取圖片元數(shù)據(jù)信息。對(duì)于視頻,可以通過(guò)loadFileRepresentation獲取URL,并利用URL獲取AVAsset;
  • 通過(guò)UTType可以進(jìn)一步判斷特殊格式資源如webp、gif等進(jìn)行不同處理;
  • 可以通過(guò)NSProgress監(jiān)聽(tīng)資源加載進(jìn)度;
  • 正確使用PHPicker可以避免引起用戶(hù)疑惑,提高用戶(hù)體驗(yàn),是iOS14訪(fǎng)問(wèn)多媒體資源的推薦方式。

總之,本文詳細(xì)介紹了在iOS14中如何正確使用PHPicker訪(fǎng)問(wèn)用戶(hù)選擇的部分照片資源,其要點(diǎn)是不需要提前獲取授權(quán),通過(guò)NSItemProvider處理多媒體資源,這是一種更符合系統(tǒng)設(shè)計(jì)初衷和提高用戶(hù)體驗(yàn)的方式。

標(biāo)注參考鏈接:

(1)https://developer.apple.com/documentation/foundation/nsitemprovider

(2)https://gist.github.com/lukebrandonfarrell/961a6dbc8367f0ac9cabc89b0052d1fe

責(zé)任編輯:武曉燕 來(lái)源: 搜狐技術(shù)產(chǎn)品
相關(guān)推薦

2009-12-10 09:42:07

2011-09-02 19:26:38

2011-08-30 15:19:23

2009-11-06 10:05:18

Linux系統(tǒng)環(huán)境GFS

2011-09-09 18:16:18

WindowsLinux

2010-04-19 15:11:25

Unix操作系統(tǒng)

2011-09-06 16:30:32

iOS系統(tǒng)靜態(tài)鏈接庫(kù)

2024-02-23 10:11:00

虛擬化技術(shù)

2014-09-12 14:41:12

2011-09-19 16:56:14

Vista秘密下載

2011-09-15 17:01:25

ubuntu備份

2011-09-05 13:19:42

UbuntuWebmin

2009-05-20 19:33:34

Vista虛擬機(jī)Linux

2022-11-16 13:23:51

2011-07-06 15:06:46

Xcode Cocoa

2009-10-21 12:42:20

Linux系統(tǒng)資源操作系統(tǒng)

2012-02-03 09:55:06

Delphi

2014-08-06 09:21:21

ubuntuPushbullet

2021-09-27 07:57:15

MEAT安全工具安全取證

2011-08-22 15:50:05

Linuxmailsendmail
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一二三区在线播放| 免费观看a级片| 成人一级福利| 久久久午夜精品理论片中文字幕| 国产91色在线免费| 欧美性生交大片| 成人av影音| 91久久精品一区二区| 中文字幕中文字幕99| 性生活视频软件| 久久久夜精品| 欧美精品中文字幕一区| 亚洲综合色一区| 国产999精品在线观看| 午夜精品爽啪视频| 亚洲一区二区在| 日本高清视频免费观看| 免费成人美女在线观看.| 欧美高清自拍一区| 97在线观看免费视频| 亚洲视频三区| 欧美日韩精品一区二区三区四区| 久久99中文字幕| 日本精品在线| 久久午夜国产精品| 成人在线免费网站| 伊人22222| 久久久久国产精品一区二区| 欧美国产极速在线| www成人啪啪18软件| 激情小说亚洲色图| 欧美肥妇毛茸茸| 色哟哟精品视频| 三妻四妾完整版在线观看电视剧| 亚洲黄色录像片| 亚洲激情一区二区| 欧美色18zzzzxxxxx| 成人性色生活片免费看爆迷你毛片| 国产精品视频区1| 日本高清不卡码| 亚洲毛片一区| 欧美激情视频网址| 强行糟蹋人妻hd中文| 99国产精品免费视频观看| 国产偷国产偷亚洲清高网站| 88av在线播放| 国产福利资源一区| 欧美高清视频一二三区| 日本不卡一区在线| a成人v在线| 欧美无人高清视频在线观看| 久久久噜噜噜www成人网| missav|免费高清av在线看| 亚洲综合一二区| 51xx午夜影福利| 深夜国产在线播放| 亚洲精品国产精品乱码不99| 国产又爽又黄ai换脸| av在线播放网站| 欧美精彩视频一区二区三区| 日韩精品久久久| 国产特黄在线| 国产精品免费视频网站| 日韩少妇中文字幕| 99reav在线| 亚洲欧美日韩一区二区 | 日韩精品福利一区二区三区| 亚洲高清免费观看高清完整版| 动漫美女无遮挡免费| 欧美交a欧美精品喷水| 日韩av在线免费看| 女~淫辱の触手3d动漫| 精品理论电影在线| 日韩一中文字幕| 青青草原在线免费观看| 亚洲高清av| 啪一啪鲁一鲁2019在线视频| 中文字幕 视频一区| 精品在线亚洲视频| 成人免费在线看片| 欧美中文在线| 国产精品成人免费在线| 特级西西人体www高清大胆| 丁香花在线观看完整版电影| 精品久久香蕉国产线看观看亚洲| 免费午夜视频在线观看| 日韩一级特黄| 亚洲成成品网站| 亚洲自拍偷拍图| 最新国产精品| 日本不卡高字幕在线2019| 亚洲一卡二卡在线观看| 成人免费av网站| 欧美日韩精品久久| 成人在线app| 色综合久久久久久久| 国产精品∨欧美精品v日韩精品| 亚洲国产精品无码久久久| 麻豆91在线播放| 国产一区二区免费在线观看| 2017亚洲天堂1024| 亚洲一区二区三区中文字幕在线| 99草草国产熟女视频在线| 国产精品视频一区二区三区综合| 日韩精品极品在线观看播放免费视频| 丰满少妇高潮一区二区| 国产一区二区三区四区老人| 国产精品h片在线播放| 高清一区二区三区四区| 国产精品人妖ts系列视频| 成人在线播放网址| 9.1麻豆精品| 亚洲天堂av女优| 国产真实乱人偷精品视频| 视频一区二区不卡| 国产精品日韩二区| 国产精品久久久久久久久久久久久久久久 | 黄色一级大片在线观看| 一区二区三区四区高清视频| 这里只有精品在线观看| 精品国产免费观看| 国产精品亚洲一区二区三区在线| 日韩电影免费观看高清完整| eeuss鲁一区二区三区| 在线观看一区不卡| 国产精品无码毛片| 国产精品激情| 999国内精品视频在线| yw在线观看| 色狠狠色狠狠综合| 日本黄色免费观看| 亚洲美女91| 91网免费观看| 成年视频在线观看| 欧美人成免费网站| 色撸撸在线视频| 日本不卡免费在线视频| 日韩福利视频| 日韩激情电影| 日韩av中文字幕在线免费观看| 精品欧美一区二区久久久久| 国内精品久久久久影院薰衣草 | 亚洲 欧美 日韩在线| 欧美精品1区| 亚洲综合在线中文字幕| 麻豆tv在线| 欧美日韩免费高清一区色橹橹 | 一区二区三区在线视频免费| 亚洲精品www.| 国产精品国内免费一区二区三区| 国产精品视频yy9099| seseavlu视频在线| 欧美午夜精品电影| 色偷偷www8888| 国产在线精品一区二区不卡了| 手机成人av在线| 国内精品视频| 久久99久国产精品黄毛片入口| 国产激情无套内精对白视频| 亚洲黄色小视频| www.555国产精品免费| 伊人精品视频| 久久伦理网站| 久久xxx视频| 日韩中文字幕在线播放| 国产精品亚洲lv粉色| 亚洲免费在线观看视频| 能看毛片的网站| 99国产精品99久久久久久粉嫩| 精品久久久久久中文字幕动漫 | 国产69精品久久久久9999apgf | 理论视频在线| 欧美日韩一区二区在线视频| 国产免费久久久久| 成人午夜激情视频| 日韩少妇内射免费播放18禁裸乳| 狠狠综合久久av一区二区蜜桃| 国产精品美女在线| 黄视频在线观看网站| 精品嫩草影院久久| 欧美一区二区三区网站| 中文字幕精品—区二区四季| 欧美成人手机在线视频| 亚洲午夜极品| 色噜噜狠狠色综合网| 福利视频在线| 亚洲第一区中文字幕| 免费看污视频的网站| 亚洲欧美一区二区三区国产精品| 国产精品久久久久久亚洲av| 首页综合国产亚洲丝袜| 日本精品免费视频| 人人精品视频| 成人欧美一区二区三区黑人孕妇| 7777kkk亚洲综合欧美网站| 国产性猛交xxxx免费看久久| 99免费在线视频| 日本精品视频一区二区| 免费中文字幕在线| 久久精品亚洲麻豆av一区二区| 久久精品一二三四| 久久三级视频| 日本人体一区二区| 久久福利综合| 久久综合久久久| 美国十次综合久久| 国产精品999999| 国产ktv在线视频| 久久影院模特热| 韩国中文字幕2020精品| 精品卡一卡二卡三卡四在线| 在线播放亚洲精品| 日韩欧美中文免费| 丰满少妇高潮久久三区| 国产免费久久精品| 国产草草浮力影院| 国产精品中文有码| 亚洲一区在线不卡| 亚洲尤物精选| 97免费视频观看| 亚洲网色网站| 在线看成人av电影| 激情五月综合| 欧美日韩国产免费一区二区三区| 中文无码日韩欧| 91在线网站视频| 成人av色网站| 国产精品亚洲片夜色在线| 欧美男人天堂| 97视频在线观看播放| 国产高清一区二区三区视频| 色婷婷**av毛片一区| 你懂的视频在线| 日韩精品中文字幕视频在线| 自慰无码一区二区三区| 欧美色999| 亲爱的老师9免费观看全集电视剧| 欧美大片黄色| 欧美videos大乳护士334| 亚洲无码精品国产| 欧美色爱综合网| 中文字幕你懂的| 欧美视频精品在线观看| 亚洲天堂男人av| 在线免费不卡视频| 国产精品成人久久久| 中文字幕一区日韩精品| 手机精品视频在线观看| 欧美大香线蕉线伊人久久国产精品| 国产66精品| 国产精品高清一区二区三区| 日韩中文字幕在线一区| 51国产成人精品午夜福中文下载| 国产在线一区不卡| 91福利入口| 久久精品国产亚洲5555| 九九九九精品| 国产一区二区三区探花| 亚洲欧洲三级| 你懂的亚洲视频| 久久手机在线视频| 亚洲色诱最新| 日韩一级理论片| 麻豆成人91精品二区三区| 天堂视频免费看| 国产精品99久久久| 日韩免费高清一区二区| 久久一二三国产| 亚洲精品自拍视频在线观看| 亚洲天堂免费在线观看视频| 免费在线观看黄色av| 亚洲国产精品久久艾草纯爱| 久久一区二区三区视频| 欧美影院精品一区| 国产夫妻性生活视频| 日韩成人av网| av每日在线更新| 色综合久久悠悠| 无遮挡在线观看| 国产这里只有精品| 99ri日韩精品视频| 日本精品一区| 欧美日韩一区二区国产| 男女高潮又爽又黄又无遮挡| 六月丁香综合在线视频| 少妇熟女视频一区二区三区| 久久久国产一区二区三区四区小说| 国产福利在线导航| 午夜av一区二区| 性色av一区二区三区四区| 欧美xxx久久| 岛国在线视频| 欧美精品免费看| 欧美舌奴丨vk视频| 91九色蝌蚪成人| 国产亚洲一区二区三区啪| 国产精品8888| 日韩高清一级片| 国产精品无码自拍| 国产精品伦一区二区三级视频| 久久这里只有精品国产| 欧美视频自拍偷拍| 天天干天天干天天干| 欧美日韩亚洲一区二| 中文字幕日韩经典| 亚洲高清不卡av| 国产在线二区| 国产精品igao视频| 国内精品麻豆美女在线播放视频| 亚洲高清视频一区| 在线视频精品| 美女又黄又免费的视频| 国产精品三级电影| 国产黄色免费观看| 日韩三级视频中文字幕| av在线女优影院| 日本精品久久久久久久| 99精品国产一区二区三区2021 | 精品欧美国产一区二区三区| 国产又粗又猛又爽又黄的视频一| 亚洲欧美国产日韩天堂区| 18加网站在线| 成人夜晚看av| 精品久久精品| 久久人妻精品白浆国产| av成人老司机| 久久精品国产亚洲AV无码男同| 91精品国产黑色紧身裤美女| av网站在线播放| 国产精品免费视频xxxx| 你懂的一区二区三区| 99精品在线免费视频| 成人免费看视频| 久热精品在线观看| 日韩欧美国产综合| 自由的xxxx在线视频| 成人激情视频网| 国产精品麻豆久久| www.久久久久久久久久久| 国产精品天天摸av网| 在线视频 中文字幕| 中文字幕久久久av一区| h1515四虎成人| 亚洲高清精品中出| 久久国产尿小便嘘嘘| 男人的午夜天堂| 欧美一区中文字幕| caopon在线免费视频| 亚洲一区中文字幕| 欧美日韩福利| 在线观看亚洲免费视频| 亚洲成av人片| 三级视频网站在线| 欧美资源在线观看| 精品日韩毛片| www.国产视频.com| 亚洲美女在线国产| 好吊色视频一区二区| 91精品国产自产91精品| 亚洲区小说区图片区qvod按摩| 北条麻妃在线一区| 国产精品入口麻豆原神| 国产精品乱码久久久| 九九九热精品免费视频观看网站| 91综合精品国产丝袜长腿久久| 久久久久久免费看| 久久视频一区二区| 在线观看免费高清视频| 久久99久国产精品黄毛片入口| 国产精品香蕉| 久久综合久久色| 成人免费小视频| 国模私拍视频在线| 国产精品96久久久久久| 亚洲乱码电影| 可以直接看的无码av| 欧美乱熟臀69xxxxxx| 国产蜜臀在线| 欧美高清性xxxxhd| 久久91精品国产91久久小草| 久久亚洲成人av| 亚洲色图在线观看| 国产剧情一区二区在线观看| 鲁一鲁一鲁一鲁一色| 亚洲国产精品黑人久久久 | 亚洲国产欧美一区| 欧美性xxx| 真实国产乱子伦对白视频| 国产亚洲成av人在线观看导航 | 亚洲欧美国产制服动漫| 日本一区二区中文字幕| 亚洲国产精品无码观看久久| 欧美国产在线观看| 黄色一级a毛片| 国产精品一区二区三区在线播放| 激情av一区| 亚洲综合久久av一区二区三区| 欧美精品一区二区久久婷婷| 久久天天久久| 男人添女荫道口图片|