精品欧美一区二区三区在线观看 _久久久久国色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)

精品人妻互换一区二区三区| 中文字幕久久综合| av图片在线观看| 青青草原综合久久大伊人精品 | av在线播放一区二区三区| 热久久美女精品天天吊色| 男女全黄做爰文章| 美女福利一区| 91精品国产全国免费观看| 2022亚洲天堂| caopon在线免费视频| 久久综合成人精品亚洲另类欧美| 91天堂在线观看| 中文字幕精品无码一区二区| 午夜激情一区| 色婷婷综合成人| 噜噜噜在线视频| 国产精品亚洲欧美日韩一区在线| 精品国产老师黑色丝袜高跟鞋| 一本一生久久a久久精品综合蜜 | 日日夜夜亚洲| 粉嫩av一区二区三区免费野| 宅男av一区二区三区| 人成在线免费视频| 国产福利一区在线| 国产精品一区二区性色av| 日本中文字幕免费| 欧美日韩四区| 久久午夜a级毛片| 国产精品久久久久久久av| 亚洲男人都懂第一日本| 欧美mv日韩mv国产网站app| www.色欧美| 成人亚洲免费| 色久优优欧美色久优优| 97国产在线播放| 丰乳肥臀在线| 亚洲综合在线免费观看| 99精品一区二区三区的区别| 91在线导航| 国产欧美精品一区二区色综合朱莉| 国产成人女人毛片视频在线| 99久久亚洲精品日本无码| 视频一区二区中文字幕| 欧美一区二区三区免费视| 亚欧洲精品在线视频| 欧美激情五月| 色综合久久天天综线观看| 三级影片在线看| 91精品久久久久久久蜜月| 中文字幕在线看视频国产欧美在线看完整 | 亚洲一区三区视频在线观看| 撸视在线观看免费视频| 久久青草欧美一区二区三区| 欧美激情一区二区三区在线视频| 天堂91在线| 久久久久久久精| 欧美日韩亚洲在线| 国产在线免费观看| 国产免费观看久久| 亚洲图片都市激情| 大地资源网3页在线观看| 亚洲欧美aⅴ...| 国产欧美自拍视频| 日本小视频在线免费观看| 亚洲国产aⅴ成人精品无吗| 欧美一级视频在线播放| 欧美三级网站| 在线观看日韩国产| www.se五月| 一区二区三区欧洲区| 亚洲成人久久网| 中国黄色a级片| 日韩av密桃| 美日韩在线视频| 日韩黄色a级片| 免费在线播放第一区高清av| 国产精品视频一区国模私拍| 99在线观看免费| 不卡在线观看av| 日本精品免费| а√天堂官网中文在线| 天天免费综合色| 国产又黄又猛又粗又爽的视频| 国产高清日韩| 亚洲大胆美女视频| 91在线无精精品白丝| 亚洲美女视频| 欧美伊久线香蕉线新在线| 一区二区视频网| 成人福利在线看| 亚洲精品日韩成人| 国产黄色大片在线观看| 欧美亚洲高清一区| 99热这里只有精品2| 精品在线99| 欧美伦理91i| 中文字幕精品视频在线观看| 国产综合色精品一区二区三区| 高清国产在线一区| h视频在线免费| 亚洲一区二区美女| 激情五月俺来也| theporn国产在线精品| 中文字幕亚洲欧美日韩高清| 国产精选第一页| 久久精品免费看| 久久人人爽爽人人爽人人片av| 麻豆影视国产在线观看| 色综合久久久久综合99| 苍井空张开腿实干12次| 欧美天天综合| 91av在线看| 精品人妻无码一区二区| 中文字幕精品三区| 欧美三级午夜理伦三级| 激情av综合| 久久久精品久久久| 久久这里只有精品9| 99国产精品国产精品毛片| 99精品视频网站| 免费高清视频在线一区| 亚洲精品mp4| 黄页网站免费观看| 国内精品自线一区二区三区视频| 欧美日韩在线高清| 在线天堂资源| 精品国产一区二区三区四区四| 中国1级黄色片| 日韩精品亚洲一区| 久久久久久久久久久一区| 韩国成人免费视频| 日韩欧美中文字幕制服| 亚洲精品自拍视频在线观看| 日韩主播视频在线| 欧美日本韩国国产| 美女100%一区| 亚洲免费人成在线视频观看| 午夜毛片在线观看| 99久久久久久99| 精品国产一区三区| 一区中文字幕电影| 欧美国产日韩中文字幕在线| 精品人妻无码一区二区三区蜜桃一 | 日本高清无吗v一区| 国产夫妻性爱视频| 国产精品色网| 免费一区二区三区| 美脚恋feet久草欧美| 亚洲欧洲国产伦综合| 无码人妻aⅴ一区二区三区有奶水| 91免费视频大全| 国产黄色特级片| 精品久久久久久久久久久aⅴ| 国产精品吊钟奶在线| 国产经典自拍视频在线观看| 欧美三级日韩三级国产三级| 亚洲天堂av中文字幕| 蜜桃视频在线观看一区二区| 影音先锋欧美资源| 美国十次综合久久| 久久久女女女女999久久| 天堂中文网在线| 日韩欧美在线免费| 色撸撸在线视频| 国产精品一区二区久久不卡| avav在线播放| 性人久久久久| 国产精品成人品| 免费大片在线观看www| 欧美一区二区精品在线| 日本熟妇毛茸茸丰满| 久久久久久久久伊人| 九九热99视频| 在线国产精品一区| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 成人免费在线播放视频| 久久久精品人妻一区二区三区| 亚洲区欧美区| 亚洲成人av动漫| 日韩一级淫片| 欧美一级片久久久久久久| 超碰国产在线| 精品国产一区二区国模嫣然| 免费的毛片视频| 亚洲欧美成人一区二区三区| 亚洲成人av免费在线观看| 蜜臀久久久99精品久久久久久| 中国一级黄色录像| 日韩av网站在线免费观看| 国产精品女视频| 日本在线视频网址| 亚洲午夜久久久久久久| 精品国产伦一区二区三| 黑人极品videos精品欧美裸| 日韩高清dvd碟片| 99视频精品全部免费在线| 777视频在线| 99综合精品| 亚洲欧洲日韩综合二区| 动漫视频在线一区| 国产欧美一区二区| 国产精品xx| 中文字幕av一区中文字幕天堂| 亚洲大尺度视频| 在线观看亚洲一区| 欧美三级韩国三级日本三斤在线观看| 亚洲国产精华液网站w| 催眠调教后宫乱淫校园| 国产中文字幕免费| 日韩激情中文字幕| 国产xxxx振车| 亚洲成人精品| 日韩欧美亚洲日产国| 美女视频亚洲色图| 亚洲专区中文字幕| 日韩经典一区| 国产91精品在线播放| 里番在线播放| 久久亚洲精品网站| 第三区美女视频在线| 日韩精品在线影院| 亚洲精品久久久久久动漫器材一区| 欧美三级电影在线观看| 国产又大又黄又粗| 午夜不卡av免费| 国产一级在线视频| 亚洲精品日韩专区silk| 国精产品视频一二二区| 久久久久久久一区| 短视频在线观看| 99精品国产一区二区三区不卡| 国产又黄又嫩又滑又白| 国产尤物一区二区| 嫩草视频免费在线观看| 麻豆精品国产传媒mv男同| 午夜视频在线瓜伦| 久久裸体视频| 成人在线观看a| 裸体一区二区| 青青在线视频观看| 香蕉久久夜色精品国产| 久久国产亚洲精品无码| 亚洲精品日本| 日韩欧美国产综合在线| 9色国产精品| 精品这里只有精品| 久久狠狠婷婷| 国产一区二区视频免费在线观看| 久久激情一区| 国产 porn| 久久精品国内一区二区三区| 在线观看国产福利| 国产美女精品人人做人人爽| 中国老熟女重囗味hdxx| 国产成人av电影在线| 国产大学生视频| 91在线观看一区二区| 97国产在线视频| 久久久久久久99| 狠狠躁夜夜躁久久躁别揉| 亚洲天堂一区在线| 在线观看日韩电影| 国产又粗又猛视频免费| 91精品国产福利在线观看 | 暖暖在线中文免费日本| 性色av一区二区三区免费| 原纱央莉成人av片| 国产精品白嫩美女在线观看| 欧美伊人亚洲伊人色综合动图| 亚洲尤物视频网| 老汉色老汉首页av亚洲| 日本一区网站| 欧美在线观看天堂一区二区三区| 国产爆乳无码一区二区麻豆| 亚洲女同在线| 爱爱爱爱免费视频| 成人美女在线观看| 欧美激情aaa| 亚洲男同1069视频| www.国产高清| 在线不卡欧美精品一区二区三区| 懂色av成人一区二区三区| 亚洲男人天堂手机在线| 黄色在线观看网站| 91精品国产91久久久久久| 国产极品一区| 国产日韩欧美一区二区| 欧美日韩在线播放视频| 国产在线视频综合| 久久蜜桃精品| 无码av免费精品一区二区三区| 国产亚洲精久久久久久| 麻豆亚洲av熟女国产一区二| 91国偷自产一区二区使用方法| 精品人妻无码一区二区| 亚洲三级 欧美三级| 91精品久久久| 国产精品久久久久久久久久新婚| 99精品国产高清一区二区麻豆| 欧美四级电影在线观看| 国产欧美精品一二三| 99精品一区二区| www.av成人| 色呦呦国产精品| 国产小视频免费观看| 最新国产精品亚洲| 欧美巨大丰满猛性社交| 97中文在线观看| 日韩大片在线| 日本精品一区在线观看| 成人性视频网站| 亚洲欧洲综合网| 91久久奴性调教| 熟妇人妻一区二区三区四区| 久久国产精品99国产精| 欧美综合影院| 日韩av电影免费在线观看| 99精品视频网| 少妇极品熟妇人妻无码| 国产精品久久久久精k8| 亚洲欧美一二三区| 亚洲开心激情网| 老司机深夜福利在线观看| 高清国产一区| 国自产拍偷拍福利精品免费一| 中文字幕在线观看日 | 波兰性xxxxx极品hd| 色哟哟国产精品免费观看| 欧洲成人一区二区三区| 欧美日韩福利在线观看| 欧美.com| 可以免费看的黄色网址| 激情另类小说区图片区视频区| 少妇av片在线观看| 欧美亚洲高清一区二区三区不卡| 日本大臀精品| 欧美在线观看视频| 日韩大片在线免费观看| 国产视频九色蝌蚪| 97精品超碰一区二区三区| 日韩和一区二区| 亚洲精品成人久久电影| 亚洲妇女成熟| 欧美精品欧美精品系列c| 噜噜噜91成人网| 久久美女免费视频| 日本高清免费不卡视频| av播放在线观看| 国产精品久久综合av爱欲tv| 欧美影院三区| av在线网址导航| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩精品视频无播放器在线看| 欧美又大粗又爽又黄大片视频| 亚洲色图美女| 日韩av手机版| 一区在线播放视频| 国产成人久久精品77777综合| 久久91精品国产91久久久| 国产成人在线中文字幕| 日本免费不卡一区二区| 国产日韩欧美制服另类| 小泽玛利亚av在线| 久久动漫网址| 播放灌醉水嫩大学生国内精品| 91蜜桃传媒精品久久久一区二区| 亚洲第一精品在线观看| 国产小视频91| 国产一区二区三区| 婷婷无套内射影院| 久久在线观看免费| 欧美成人一区二区视频| 久久亚洲精品视频| 欧美国产极品| 国产aaaaa毛片| 一区二区三区日韩欧美精品| 五十路在线视频| 国产精品扒开腿做| 欧美喷水视频| 人人妻人人藻人人爽欧美一区| 欧美裸体bbwbbwbbw| 国产美女一区视频| 日韩欧美第二区在线观看| 国产在线精品免费av| 好吊操这里只有精品| 中文字幕国产精品久久| 91蝌蚪精品视频| 日韩有码免费视频| 亚洲综合色自拍一区| 国产三级视频在线看| 亚洲最大福利视频网站| 久久高清一区| 免费一级全黄少妇性色生活片| 4438亚洲最大| 新版的欧美在线视频| 国产美女视频免费| 久久久久久免费网| 精品人妻无码一区二区色欲产成人| 国产第一区电影|